|
Светодиоды и AVR не дружат. |
|
|
|
Mar 20 2006, 21:16
|
Местный
  
Группа: Свой
Сообщений: 300
Регистрация: 15-03-06
Из: Москва
Пользователь №: 15 284

|
В общем дело вот в чем, сегодня доехал таки до чипа и дипа и закупился необходимыми деталями. Спаял простую схемку с одним диодом через резистор подключающимся к AVR MEGA8. Программу которая просто мигает этим диодом залил в МК. Все отлично зашилось через 5 проводков, диод замигал в опщем щастье! Захотелось большего, и припаял еще 3 диода все к порту C выводам 2,3,4,5. Записал в МК прошивку: Цитата #include <mega8.h>
// Timer 0 overflow interrupt service routine interrupt [TIM0_OVF] void timer0_ovf_isr(void) { if (PORTC.5==0) { PORTC.5=1; PORTC.4=0; } else { PORTC.5=0; PORTC.4=1; } // Place your code here
}
// Declare your global variables here
void main(void) { PORTC.5=0; PORTC.4=1; // Declare your local variables here
// Input/Output Ports initialization // Port B initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=Out // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=0 PORTB=0x00; DDRB=0x01;
// Port C initialization // Func6=In Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out // State6=T State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 PORTC=0x00; DDRC=0x3F;
// Port D initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTD=0x00; DDRD=0x00;
// Timer/Counter 0 initialization // Clock source: System Clock // Clock value: 3,906 kHz TCCR0=0x04; TCNT0=0x00;
// Timer/Counter 1 initialization // Clock source: System Clock // Clock value: Timer 1 Stopped // Mode: Normal top=FFFFh // OC1A output: Discon. // OC1B output: Discon. // Noise Canceler: Off // Input Capture on Falling Edge TCCR1A=0x00; TCCR1B=0x00; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00;
// Timer/Counter 2 initialization // Clock source: System Clock // Clock value: Timer 2 Stopped // Mode: Normal top=FFh // OC2 output: Disconnected ASSR=0x00; TCCR2=0x00; TCNT2=0x00; OCR2=0x00;
// External Interrupt(s) initialization // INT0: Off // INT1: Off MCUCR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x01;
// Analog Comparator initialization // Analog Comparator: Off // Analog Comparator Input Capture by Timer/Counter 1: Off ACSR=0x80; SFIOR=0x00;
// Global enable interrupts #asm("sei")
while (1) { // Place your code here
}; } В результате все диоды мигают одновременно с частотой таймера, хотя должны мигать только PC.4 и PC.5 ПООЧЕРЕДНО! И еще момент такой, в ISIS все эмулируется нормально, т.е. помигивают только 2 диода поочередно, остальные не горят. Помогите плз разобраться )
Сообщение отредактировал ps1x - Mar 20 2006, 21:18
|
|
|
|
3 страниц
1 2 3 >
|
 |
Ответов
(1 - 38)
|
Mar 20 2006, 22:33
|
Местный
  
Группа: Свой
Сообщений: 300
Регистрация: 15-03-06
Из: Москва
Пользователь №: 15 284

|
ДОБАВЛЕННО: И еще, попробовал прогнать програмку: PORTC++; delay_ms(500); if (PORTC==200) {PORTC=37;} результаты весьма странные, получается инвертированый порт, т.е. если в программе PC.5 = 1 то в реальности светодиод не горит!!! (кстати выражение вида PORTC.5=1 компилируется, но результата не дает, равно как и PORTC.5=0 т.е. светодиоды не горят все или горят все) Если заменить PORTC.5 на PORTC.4 то вообще ничего не мигает =( Конечно можно, извиняюсь за некоторую неразборчивость схемы:
Сообщение отредактировал ps1x - Mar 20 2006, 22:47
Эскизы прикрепленных изображений
|
|
|
|
|
Mar 21 2006, 00:14
|
Частый гость
 
Группа: Участник
Сообщений: 146
Регистрация: 16-05-05
Пользователь №: 5 069

|
Цитата Все отлично зашилось через 5 проводков, диод замигал в опщем щастье! ... // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: 3,906 kHz То есть Вы утверждаете, что в состоянии различить мигание с частотой 3,906 kHz? Александр 2006 03 21
|
|
|
|
|
Mar 21 2006, 00:58
|
Местный
  
Группа: Свой
Сообщений: 300
Регистрация: 15-03-06
Из: Москва
Пользователь №: 15 284

|
Как Вы думаете, что будет, если зашить в МК вот эту программу, и к выводам PORTD.0 и PORTD.1 подключить два светодиода на землю, через защитное сопротивление в 200 Ом??? Цитата #include <mega8.h> #include <delay.h>
interrupt [TIM0_OVF] void timer0_ovf_isr(void) {
}
void main(void) {
PORTD=0x00; DDRD=0xFF; TCCR0=0x04; TCNT0=0x00; TIMSK=0x01; ACSR=0x80; SFIOR=0x00;
#asm("sei")
while (1) { PORTD.0=1; PORTD.1=0; delay_ms(100); PORTD.1=1; PORTD.0=0; delay_ms(100); }; } А вот и не угадали, ничего не будет. (по крайней мере если компилировать в СV AVR и зашивать им же) в общем я офигевваю Кто нибудь скажите пожалуйста, что же за фигня происходит. Кстати, если PORTD.0=1; PORTD.1=0; delay_ms(100); PORTD.1=1; PORTD.0=0; delay_ms(100); заменить на PORTD++; то загораются все 4 светодиода, однако если заменить на PORTD=0xFF; то загорается светодиод PORTD.3 Вот схема подключения диодов:
Сообщение отредактировал ps1x - Mar 21 2006, 01:06
Эскизы прикрепленных изображений
|
|
|
|
|
Mar 21 2006, 04:39
|
Местный
  
Группа: Свой
Сообщений: 300
Регистрация: 15-03-06
Из: Москва
Пользователь №: 15 284

|
Может быть дело в фьюзах? Всю ночь бился ап стену и не смог заставить схемку правильно мигать лампочками. Наверно пора убить себя  . УМНЫЕ ЛЮДИ УМОЛЯЮ ВАС, СКАЖИТЕ ЧТОЖЕ НУЖНО СДЕЛАТЬ ЧТОБЫ ОНО ЗАРАБОТАЛО!!!!! И почему не получается PORTD.0=1?
|
|
|
|
|
Mar 21 2006, 05:49
|
Местный
  
Группа: Свой
Сообщений: 300
Регистрация: 15-03-06
Из: Москва
Пользователь №: 15 284

|
Мега тактируется от внутреннего осциллятора, а фьюзы все по нулям. Диоды подключены так: PORTD.0 ---> +диода ----> диод -----> 200 ом ----> Земля и так для каждого пина порта D. Разве это не правильно? ps Спасибо за отзывы.
|
|
|
|
|
Mar 21 2006, 07:19
|
Местный
  
Группа: Свой
Сообщений: 300
Регистрация: 15-03-06
Из: Москва
Пользователь №: 15 284

|
Спасибо за сочувствие... ) Как вы думаете, заработает ли программатор через Вот эти контроллерыА как тогда управлять светодиодами? Порты на вход?
Сообщение отредактировал ps1x - Mar 21 2006, 07:21
|
|
|
|
|
Mar 21 2006, 07:31
|

Гуру
     
Группа: Свой
Сообщений: 2 538
Регистрация: 13-08-05
Пользователь №: 7 591

|
Цитата(beer_warrior @ Mar 21 2006, 10:13)  КАЖДОМУ СВЕТОДИОДУ - СВОЙ РЕЗИСТОР. Я о том же. Чего им управлять- резистор на +, к нему анод св. диода , катод к выводу АВРа.Порт на вывод. Выводишь "1" -не горит, "0" -горит. Цитата(ps1x @ Mar 21 2006, 10:19)  Как вы думаете, заработает ли программатор через Вот эти контроллерыЧерез ЛПТ-шный будет. Не знаю , что у Вас за программатор, но сомниваюсь , что Вы спалили АВР. Скорее "залочили" тогда нужен параллельный, или затерли идентификатор - тогда АВРеал.
|
|
|
|
|
Mar 21 2006, 07:53
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(ps1x @ Mar 21 2006, 07:49)  Мега тактируется от внутреннего осциллятора, а фьюзы все по нулям. Диоды подключены так: PORTD.0 ---> +диода ----> диод -----> 200 ом ----> Земля и так для каждого пина порта D. Разве это не правильно?  Конечно не правильно.. должно быть PORT.X --> 270ом -> +диода -> GND в программе: DDRD = 0xFF; PORTD = 0xFF; // на этой строчке "да будет свет"
|
|
|
|
|
Mar 21 2006, 08:29
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(ps1x @ Mar 21 2006, 10:13)  Паленость МК выражается тем что я по недосмотру "случайно замкнул около 10 выводов мк на +5 от молекса компьтера, при этом раздался характерный треск электрических разрядов  " Так паленость МК, или паленость LPT? Цитата в чип и дип за еще одним МК и подпружиненой панелькой для программатора, купить PCI --> LPT... Попытать счастья еще разок. МК поддерживают ISP программирование, зачем панельки, просто на целевой плате предусмотрите разъем 5 контактов (GND/RESET/SCK/MISO/MOSI), и купите касичку "широкий COM 25 контактов". Касичку перепаять в соответствии со схемой FunCard, одним концом подключить к LPT другим (тем что задумывался как на плату) - к целевой плате. Ну и купите в чип-и-дипе за одно max232 и mega8535 чтобы собрать нормальный программатор - AVRISP.
|
|
|
|
|
Mar 22 2006, 15:34
|
Профессионал
    
Группа: Свой
Сообщений: 1 453
Регистрация: 23-08-05
Пользователь №: 7 886

|
Цитата(ps1x @ Mar 22 2006, 17:30)  Паленость одного из двух МК и ЛПТ на материнке ((. Вариант с ЛПТ на PCI не прокатил - программатор avreal и codevision с ним не дружат.
Теперь резонный вопрос где взять схемку STK-500? Он ведь через ком шьет? Или почем можно купить дешовый вариант? ну и желательно подсказать где... (в москве) когда-то давно я уже давал совет что делать если были сожжены линиии LPT порта. варианты: 1) достать PCI LPT! AVReal через него умеет работать! хорошо читайте прилагаемый к нему readme 2) AVReal умеет использовать разные линии LPT порта, попробуйте выбрать в конфиге такие, которые остались живы.
|
|
|
|
|
Mar 23 2006, 18:53
|
Местный
  
Группа: Свой
Сообщений: 300
Регистрация: 15-03-06
Из: Москва
Пользователь №: 15 284

|
Цитата Думаю, надо выбрать номер порта. )) Думаю, это первое что я сделал. В общем решил проапгрейдить материнку и спаять нормальный STK-200 чтоб порт опять не спалить.
|
|
|
|
|
Mar 24 2006, 08:12
|

Частый гость
 
Группа: Свой
Сообщений: 175
Регистрация: 26-01-06
Из: Sevastopol
Пользователь №: 13 664

|
Цитата(AndyBig @ Mar 21 2006, 00:51)  Во-первых, совет: светодиоды подключайте к контроллеру не анодом, а катодом - на землю мега вроде бы выносливее, чем от питания. Цитата(ILYCHOFF @ Mar 21 2006, 07:43)  Подключите сначала светодиоды нормально как Вам AndyBig писал Я, конечно, жутко извиняюсь, но, господа, неужели трудно перед тем, как давать советы (особенно категорические - "сначала сделай нормально"), заглянуть в datasheet и посмотреть, так ли это? Лично я всегда туда смотрю прежде, чем дать какой-либо совет. Читаем в любой меге: Цитата Each output buffer has symmetrical drive characteristics with both high sink and source capability. The pin driver is strong enough to drive LED displays directly. И картинки графиков входного и выходного токов портов подтверждают то же самое. Так, извините, зачем же наследие PIC-ов бездумно переносить на всё остальное? Таким бездумным советом (хорошо, если он сопровождается "вроде бы" - тогда вопроса нет) можно заставить человека перелопатить схему (и хорошо. если это макет, а не специально сделанная pcb) без видимого на то повода. Поленившись заглянуть в даташит (сэкономив 1 минуту своего времени), можно потратить 15-30 минут времени чужого. Есть предложение внимательнее относиться к таким вещам. Автору темы: светодиоды можно ставить так, как хочется. Ограничивающие резисторы, безусловно, нужны. Но полярность может быть любой, лишь бы можно было его зажечь.
|
|
|
|
|
Mar 24 2006, 08:47
|
Местный
  
Группа: Свой
Сообщений: 232
Регистрация: 22-02-06
Из: Воронеж
Пользователь №: 14 589

|
Цитата В общем решил проапгрейдить материнку и спаять нормальный STK-200 чтоб порт опять не спалить. По моему Вам будет дешевле спаять SI-Prog и пользоваться PonyProg - уже несколько лет пользуюсь - Вещь!! А по поводу светодиодов. И действительно к Mege можно подключать светодиоды и анодом и катодом  . Сам привык к AT90 так там если катодом, то макс. ток 20mA, а если анодом, то 3mA. Но все равно крайне желательно по своему резистору на каждый светодиод. Резистор рассчитывается так: Сопротивление,Ом = (Напряжение питания,В - Падение напряжения на светодиоде,В - Падение напряжения на порте при заданном токе,В) / ток через светодиод,А Падение напряжения на светодиоде и ток через светодиод - смотрится в параметрах светодиода Падение напряжения на порте при заданном токе - смотрится в доке на Mega-у
--------------------
Истина рождается в спорах; но когда страсти кипят, истина испаряется.
|
|
|
|
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|