В общем дело вот в чем, сегодня доехал таки до чипа и дипа и закупился необходимыми деталями.
Спаял простую схемку с одним диодом через резистор подключающимся к 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 диода поочередно, остальные не горят.
Помогите плз разобраться )
Уже 11 человек посмотрели эту тему, неужели никто из них не знает в чем дело?
Кстати если это поможет понять проблему - пользуюсь Code Vision AVR.
AndyBig
Mar 20 2006, 22:29
По идее все верно, должны моргать поочередно РС4 и РС5...
Вообще-то, АВР очень даже дружит со светодиодами, так что где-то ошибка. Схему подключения можно глянуть?
ДОБАВЛЕННО: И еще, попробовал прогнать програмку:
PORTC++;
delay_ms(500);
if (PORTC==200)
{PORTC=37;}
результаты весьма странные, получается инвертированый порт, т.е. если в программе PC.5 = 1 то в реальности светодиод не горит!!! (кстати выражение вида PORTC.5=1 компилируется, но результата не дает, равно как и PORTC.5=0 т.е. светодиоды не горят все или горят все)
Если заменить PORTC.5 на PORTC.4 то вообще ничего не мигает =(
Конечно можно, извиняюсь за некоторую неразборчивость схемы:
AndyBig
Mar 20 2006, 22:51
Во-первых, совет: светодиоды подключайте к контроллеру не анодом, а катодом - на землю мега вроде бы выносливее, чем от питания.
Во-вторых, какое напряжение питания у Вас на меге? Если 5 вольт, то 100 ом - это слишком мало для гасящего резистора, ток с вывода превысит максимально допустимый. Возможно, в этом проблема?
Щас момент, не уходите спать, подпаяю еще один резюк...
Хотя они вроде довольно тускло горят....
Резюк припаял но увы, чуда не случилось...
Странный момент в CVAVR я пишу PORTC.3=1 но нифига не работает, пишу PORTC=0b00100 тоже не пашет, а PORTC=0xBB работает, но наооборот ((( инвертируется) (?????????)
Еще кое-что интересное:
Если выполнить
PORTC=0xBB;
то загораются диоды подключенные к PC5 и PC2 хотя калькулятор дает следующее:
(HEX)0xBB=0b10111011
Другой Мк тоже не работает корректно при записи PORTC.5=1 загораются все светодиоды (((
Laksus
Mar 21 2006, 00:14
Цитата
Все отлично зашилось через 5 проводков, диод замигал в опщем щастье!
...
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 3,906 kHz
То есть Вы утверждаете, что в состоянии различить мигание с частотой 3,906 kHz?
Александр
2006 03 21
2 Laksus : Насколько я понял это делитель.
Впрочем, при выполнении данной программы диод мигал с периодом около секунды наверное, т.е. вполне различимо.
Еще одна проблема:
Попробовал подключить те самые 4 светодиода к порту Д. От 0 до 3.
При выполнении программы
PORTD=0xFF;
Загорается диод подключенный к порту PORTD.3 и все!!!!
Кто нибудь обьясните плз дебилу что это за хрень.
И еще почему не работает конструкция вида PORTD.3=1;????
Как Вы думаете, что будет, если зашить в МК вот эту программу, и к выводам 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
Вот схема подключения диодов:
Может быть дело в фьюзах? Всю ночь бился ап стену и не смог заставить схемку правильно мигать лампочками. Наверно пора убить себя

.
УМНЫЕ ЛЮДИ УМОЛЯЮ ВАС, СКАЖИТЕ ЧТОЖЕ НУЖНО СДЕЛАТЬ ЧТОБЫ ОНО ЗАРАБОТАЛО!!!!!
И почему не получается PORTD.0=1?
ОТ чего тактируется мега и фьзы в студию.
ILYCHOFF
Mar 21 2006, 05:43
Подключите сначала светодиоды нормально как Вам AndyBig писал, затем проверьте фьюзы см. даташит и кстати от чего тактируется мега.
Я сам начинал работу с контроллерами с такой же программы и тоже на CodeVision, но у меня вообще никаких проблем не было.
Все внимательно перепроверьте по себе знаю.
конструкция PORTD.1=1; прекрасно работает (в CodeVision разумеется).
Мега тактируется от внутреннего осциллятора, а фьюзы все по нулям.
Диоды подключены так:
PORTD.0 ---> +диода ----> диод -----> 200 ом ----> Земля
и так для каждого пина порта D.
Разве это не правильно?
ps Спасибо за отзывы.
и еще, вот такой код
PORTD=0b00001000;
Вызывает зажигание светодиодов PD0-3. Остальные не горят (((
Не мог же контроллер (точнее два) спалиться так, что он как то работает но не правильно?
Т0 -8-РАЗРЯДНЫЙ.Прескалер ты выбрал на 256,т.е Fвх Т0=3906hz.Прерывание по переполнению у тебя
будут возникать 3096/256=12hz.чего ты глазом не увидишь.Ставь прескалер на 1024-TCCR0=5,тогда
прерывния по переполнению будут возникать f=3,81hz и внутри надо сделать программный счетчик-
static unsigned char count;
if(++count>3) ----инвертируешь светодиоды.
Или используй Т1-он 16-разрядный.
Да,еще в опциях процента установлена частота проца 1Мгц?
Ты используешь встроенный программатор CV?фьюзы в 0-имеется в виду наверно в1 -галочки не стоят?
Да на счет фьюзов именно так.
Использовал встроенный программатор.
Только что я по глупому спалил себе ЛПТ

.
И Мк тоже. Даже не спрашивайте как. Что делать в этом случае? Будет ли программатор работать с лпт на PCI платке? Или можно спаять USB программатор? Или мне лучше сразу повеситься?
muravei
Mar 21 2006, 07:10
Цитата(ps1x @ Mar 21 2006, 10:00)

Это радикальнее.

Я бы начал с с установки по ОТДЕЛЬНОМУ резистору на каждый вывод.
Резисторы уже не помогут поскольку я спалил ЛПТ... Надо мне было думать раньше. Хотя они и так не помогли бы...
beer_warrior
Mar 21 2006, 07:13
Стоп, стоп.
Включение светодиодов!!!
Свтодиоды включаются катодом на кристалл, с резистором на питание
300...470 ом и КАЖДОМУ СВЕТОДИОДУ - СВОЙ РЕЗИСТОР.
Иначе в зависимости от кол-ва включенных светодиодов через резистор быдет идти ток от I до 4I и соответсвенно будет меняться напряжение в точке соединения резистора и диодов.
Спасибо за сочувствие... )
Как вы думаете, заработает ли программатор через
Вот эти контроллерыА как тогда управлять светодиодами? Порты на вход?
muravei
Mar 21 2006, 07:31
Цитата(beer_warrior @ Mar 21 2006, 10:13)

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

Как вы думаете, заработает ли программатор через
Вот эти контроллерыЧерез ЛПТ-шный будет.
Не знаю , что у Вас за программатор, но сомниваюсь , что Вы спалили АВР.
Скорее "залочили" тогда нужен параллельный, или затерли идентификатор - тогда АВРеал.
Программатор "5 проводков" ЛПТ спалил стабильно, один из двух МК должен быть жив и незалочен (по идее), второй паленый и залоченый ))) тоесть совсем ему туго досталось.
muravei
Mar 21 2006, 07:48
Цитата(ps1x @ Mar 21 2006, 10:38)

Программатор "5 проводков" ЛПТ спалил стабильно, один из двух МК должен быть жив и незалочен (по идее), второй паленый и залоченый ))) тоесть совсем ему туго досталось.
В чем выражается паленость МК?
ну так купи PCI плату с портами-350рублей.
defunct
Mar 21 2006, 07:53
Цитата(ps1x @ Mar 21 2006, 07:49)

Мега тактируется от внутреннего осциллятора, а фьюзы все по нулям.
Диоды подключены так:
PORTD.0 ---> +диода ----> диод -----> 200 ом ----> Земля
и так для каждого пина порта D.
Разве это не правильно?

Конечно не правильно.. должно быть PORT.X --> 270ом -> +диода -> GND
в программе:
DDRD = 0xFF;
PORTD = 0xFF; // на этой строчке "да будет свет"
defunct
Mar 21 2006, 08:04
Цитата(beer_warrior @ Mar 21 2006, 09:13)

Свтодиоды включаются катодом на кристалл, с резистором на питание
300...470 ом и КАЖДОМУ СВЕТОДИОДУ - СВОЙ РЕЗИСТОР.
Включаются так как нужно, нужна инверсия - к питанию, не нужна - тогда к земле.
резисторы рассчитываются под конкретный тип диода, как Vcc / ток диода, для неярких (20ma) светодиодов - R = 250..270, для ярких 2ma - ~1kom.
Паленость МК выражается тем что я по недосмотру "случайно замкнул около 10 выводов мк на +5 от молекса компьтера, при этом раздался характерный треск электрических разрядов

"
Задачи на сегодня - съездить в институт, в чип и дип за еще одним МК и подпружиненой панелькой для программатора, купить PCI --> LPT... Попытать счастья еще разок.
p.s. Всем большое спасибо за советы!
defunct
Mar 21 2006, 08:29
Цитата(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.
muravei
Mar 21 2006, 10:27
Цитата(ps1x @ Mar 21 2006, 10:38)

Программатор "5 проводков"
Судя повсему ISP...
Паленость одного из двух МК и ЛПТ на материнке ((.
Вариант с ЛПТ на PCI не прокатил - программатор avreal и codevision с ним не дружат.
Теперь резонный вопрос где взять схемку STK-500? Он ведь через ком шьет? Или почем можно купить дешовый вариант? ну и желательно подсказать где... (в москве)
Цитата(ps1x @ Mar 22 2006, 17:30)

Паленость одного из двух МК и ЛПТ на материнке ((.
Вариант с ЛПТ на PCI не прокатил - программатор avreal и codevision с ним не дружат.
Теперь резонный вопрос где взять схемку STK-500? Он ведь через ком шьет? Или почем можно купить дешовый вариант? ну и желательно подсказать где... (в москве)
когда-то давно я уже давал совет что делать если были сожжены линиии LPT порта.
варианты:
1) достать PCI LPT! AVReal через него умеет работать! хорошо читайте прилагаемый к нему readme
2) AVReal умеет использовать разные линии LPT порта, попробуйте выбрать в конфиге такие, которые остались живы.
defunct
Mar 22 2006, 16:13
Цитата
Теперь резонный вопрос где взять схемку STK-500? Он ведь через ком шьет?
выложил упрощенную схему в
этой ветке
muravei
Mar 23 2006, 07:11
Цитата(ps1x @ Mar 22 2006, 17:30)

Вариант с ЛПТ на PCI не прокатил - программатор avreal и codevision с ним не дружат.
Думаю, надо выбрать номер порта.
Цитата
Думаю, надо выбрать номер порта.
)) Думаю, это первое что я сделал.
В общем решил проапгрейдить материнку и спаять нормальный STK-200 чтоб порт опять не спалить.
Цитата(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 минут времени чужого. Есть предложение внимательнее относиться к таким вещам.
Автору темы: светодиоды можно ставить так, как хочется. Ограничивающие резисторы, безусловно, нужны. Но полярность может быть любой, лишь бы можно было его зажечь.
Цитата
В общем решил проапгрейдить материнку и спаять нормальный STK-200 чтоб порт опять не спалить.
По моему Вам будет дешевле спаять
SI-Prog и пользоваться PonyProg - уже несколько лет пользуюсь - Вещь!!
А по поводу светодиодов.
И действительно к Mege можно подключать светодиоды и анодом и катодом

.
Сам привык к AT90 так там если катодом, то макс. ток 20mA, а если анодом, то 3mA.
Но все равно крайне желательно по своему резистору на каждый светодиод.
Резистор рассчитывается так:
Сопротивление,Ом = (Напряжение питания,В - Падение напряжения на светодиоде,В - Падение напряжения на порте при заданном токе,В) / ток через светодиод,А
Падение напряжения на светодиоде и ток через светодиод - смотрится в параметрах светодиода
Падение напряжения на порте при заданном токе - смотрится в доке на Mega-у
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.