реклама на сайте
подробности

 
 
3 страниц V  < 1 2 3  
Reply to this topicStart new topic
> Светофор в "Си"для контроллера с SIG_INTERRUPT0
SysRq
сообщение Feb 1 2009, 17:52
Сообщение #31


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



Я углядел что на картинке m48 и выше, а m8 не заметил, и написал здоровенный пост, но потом заметил и m8, и написанное стер laughing.gif
Определитесь какой у вас там МК, ибо разница есть, я как раз ее и описал. Или вы без железа проверяете?..

PS: cntr тоже надо сделать глобальной.
Go to the top of the page
 
+Quote Post
konstatinopol
сообщение Feb 1 2009, 18:04
Сообщение #32


Участник
*

Группа: Новичок
Сообщений: 18
Регистрация: 31-01-09
Пользователь №: 44 210



Цитата(SysRq @ Feb 1 2009, 20:52) *
Я углядел что на картинке m48 и выше, а m8 не заметил, и написал здоровенный пост, но потом заметил и m8, и написанное стер laughing.gif
Определитесь какой у вас там МК, ибо разница есть, я как раз ее и описал. Или вы без железа проверяете?..

PS: cntr тоже надо сделать глобальной.


Если я вас понял правильно то MK это микроконтроллер, в описании стоит Prozessor ATmega8
На всякий случай выложу полное описание запчастей :

# 1 Prozessor ATmega8
# 1 RS232Treiber
# 1 Bustreiber 74HC 125N
# 1 Drosselspule 10 µH
# 1 Gleichrichter
# 5 Diode 100mA
# 1 Diode 1A
# 1 gelbe LED 2mA
# 2 grьne LED 2mA
# 1 rote LED 2mA
# 4 Kondensator 1µF
# 4 Kondensator 100nF
# 1 Kondensator 220µF
# 2 Kondensator 33pF
# 1 Kondensator 47µF
# 4 Widerstand 1,2 kOhm
# 2 Widerstand 10,5 kOhm
# 2 Potentiometer
# 2 Miniaturtaster
# 1 IC-Sockel
# 1 Buchse 9-polig SUBD
# 1 Buchse 25-polig SUBD
# 2,25 Sockelleiste SPL20, einreihig
# 1 Piezoschallwandler
# 1 Printstecker
# 1 Standardquarz
# 1 20polig einreihig, abgewinkelt
# 1 Stiftleiste
# 2 PSK-Kontakt
# 1 Kupplungs-Leergehдuse

Страница производителя
Прошу прощения за мою безграмотность.


cntr уже посадил как глобальную.

Сообщение отредактировал konstatinopol - Feb 1 2009, 18:06
Go to the top of the page
 
+Quote Post
aesok
сообщение Feb 1 2009, 22:11
Сообщение #33


Знающий
****

Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484



У Вас прерывание настроенно по обеим фронтам MCUCR = 1; => ISC01:ISC00 = 01 => Any logical change on INT1 generates an interrupt request.

Нужно скорее всего по одному.

Анатолий.
Go to the top of the page
 
+Quote Post
konstatinopol
сообщение Feb 1 2009, 22:15
Сообщение #34


Участник
*

Группа: Новичок
Сообщений: 18
Регистрация: 31-01-09
Пользователь №: 44 210



Цитата(aesok @ Feb 2 2009, 01:11) *
У Вас прерывание настроенно по обеим фронтам MCUCR = 1; => ISC01:ISC00 = 01 => Any logical change on INT1 generates an interrupt request.

Нужно скорее всего по одному.

Анатолий.


Значит ли это что MCUCR я должен прировнять к 2 ?? Или я ошибаюсь. Я просто запись => ISC01:ISC00 = 01 => неочень понял
Go to the top of the page
 
+Quote Post
aesok
сообщение Feb 1 2009, 22:34
Сообщение #35


Знающий
****

Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484



Цитата(konstatinopol @ Feb 2 2009, 01:15) *
Значит ли это что MCUCR я должен прировнять к 2 ??


Или 2 или 3 в зависимость от того переходом PC1 из 1->0 или 0->1 Вы хотите запускать второй сфетофор.

Цитата(konstatinopol @ Feb 2 2009, 01:15) *
Я просто запись => ISC01:ISC00 = 01 => неочень понял


Таблица 31 в даташите на ATmega8.

Биты ISC01 и ISC00 регистра MCUCR задают условия срабатывания
прерывания. Можно написать ISC01, = 0 ISC00 = 1 а можно объединить эти
2 бита записав ISC01:ISC00 = 10.


Анатолий

Сообщение отредактировал aesok - Feb 1 2009, 22:35
Go to the top of the page
 
+Quote Post
konstatinopol
сообщение Feb 1 2009, 23:10
Сообщение #36


Участник
*

Группа: Новичок
Сообщений: 18
Регистрация: 31-01-09
Пользователь №: 44 210



Цитата(aesok @ Feb 2 2009, 01:34) *
Биты ISC01 и ISC00 регистра MCUCR задают условия срабатывания
прерывания. Можно написать ISC01, = 0 ISC00 = 1 а можно объединить эти
2 бита записав ISC01:ISC00 = 10.


Напишу как понял. Это значит что в одной программе(на одном борту) должно быть MCUCR=2, а на другом MCUCR=3.
Или мне туда ещё ISC01:ISC00 = 10 вписать нужно?? Программу надо представить уже завтра а я смотрю на неё и немогу понять что в ней надо подправить чтобы она работала.
Причина редактирования: Уменьшение размера цитируемого сообщения.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Feb 1 2009, 23:27
Сообщение #37


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(konstatinopol @ Feb 2 2009, 03:10) *
Или мне туда ещё ISC01:ISC00 = 10 вписать нужно??

Надо так:

Код
MCUCR = (1 << ISC01);


Если бы Вы написали что-нить в таком стиле (с симв. именами) изначально, то этот косяк ужЕ вчера бы кому-то на глаза попался.
Go to the top of the page
 
+Quote Post
SysRq
сообщение Feb 2 2009, 00:05
Сообщение #38


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



Цитата(_Pasha @ Feb 2 2009, 02:27) *
Если бы Вы написали что-нить в таком стиле (с симв. именами) изначально, то этот косяк ужЕ вчера бы кому-то на глаза попался.

Он попался, но это не имеет значения. Ошибка где-то глобальнее.
Go to the top of the page
 
+Quote Post
konstatinopol
сообщение Feb 2 2009, 13:09
Сообщение #39


Участник
*

Группа: Новичок
Сообщений: 18
Регистрация: 31-01-09
Пользователь №: 44 210



Господа благодарю всех за содействие программа работает без ошибок. biggrin.gif
Проблемма была в том месте где мы закрывали PORTC. Я просто поменял место где его закрываю.
Вот так выглядит готовая программа светофора.

CODE
#include <stdint.h>
#include <avr/io.h>
#include <avr/wdt.h>
#include <avr/signal.h>
#include <avr/interrupt.h>


short cntr = 0;
int a=0;

void lampochki()
{
if(PORTB==1)
{
PORTB=3;
}
else if(PORTB==3){
PORTB=4;

}else if(PORTB==4)
{
PORTB=2;

}else if(PORTB==2)
{
PORTB=1;
a=1;
PORTC = 1;
}
}

int main()
{
DDRB=7;
DDRD=0;
PORTD=4;
PORTB=1;
DDRC = 7;
PORTC=0;
TCNT0 = 244;
cntr = 28;
TCCR0 = 5;
TIMSK = 1;
GICR = 64;
MCUCR = 3;
sei();

while(1){}
}

SIGNAL(SIG_OVERFLOW0){
if(!(cntr--))
{
TCNT0=244;
cntr=28;
if(a==0)
lampochki();
}
PORTC = 0;
}

SIGNAL(SIG_INTERRUPT0){
a=0;
}


И если борты разсоединить то они оба останавливаются на крассной лампочке.

Сообщение отредактировал rezident - Feb 2 2009, 17:54
Причина редактирования: Тег code заменен на codebox. Весьма объемный исходник.
Go to the top of the page
 
+Quote Post
aesok
сообщение Feb 2 2009, 17:28
Сообщение #40


Знающий
****

Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484



Код
#include <stdint.h>
#include <avr/io.h>
#include <avr/wdt.h>
#include <avr/signal.h>
#include <avr/interrupt.h>                                                                              

short cntr = 0;
int a=0;


Ах..... не умеете Вы учиться на чужих ошибках. Будете учиться на своих, по крайней мере как делать правильно Вам расказали.

Анатолий.
Go to the top of the page
 
+Quote Post
konstatinopol
сообщение Feb 2 2009, 18:24
Сообщение #41


Участник
*

Группа: Новичок
Сообщений: 18
Регистрация: 31-01-09
Пользователь №: 44 210



Цитата(aesok @ Feb 2 2009, 21:28) *
Ах..... не умеете Вы учиться на чужих ошибках. Будете учиться на своих, по крайней мере как делать правильно Вам расказали.

На своих всегда интерестнее ...
Всёравно спасибо, для меня щас главное что всё работает!!!!
Причина редактирования: Уменьшение размера цитаты. Цитируя всего два предложения убирайте из цитаты ненужный исходник!
Go to the top of the page
 
+Quote Post

3 страниц V  < 1 2 3
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th June 2025 - 13:10
Рейтинг@Mail.ru


Страница сгенерированна за 0.01452 секунд с 7
ELECTRONIX ©2004-2016