Вот и написана в CodeVision Первая программа. В VMLab симулируется нормально. Зашил в ATMega16. В ответ тишина.
В проекте выбран ATmega16, 4MHz. Прошиваю PonyProg.
Фьюзы такие (отмечены галочками в PonyProg):
SUT1=1
CKSEL1=1
CKSEL0=1
На 40-й ноге телодвижений нет.
Reset через 0,1 мф на землю. +5 на VCC и AVCC
---------------------------------
#include
#define PA_OUT DDRA = 0b00000001
void initialization(void)
{
PORTA=0b11111110;
PA_OUT; //сделать PORTA выходом
TCCR0 = 0x4;/* таймер включить */
}
void main(void)
{
unsigned int Flag;
initialization();
while (1)
{
Flag=0;
if((TIFR&0x01)) // Проверка флага переполнения timer0
{
TIFR = 0x01; // очистить флаг переполнения timer0
PORTA.0=~PORTA.0; //Инвертировать значение в порту А
}
};
}
---------------------------------
Объясните пожалуйста, что неправильно сделал?
Фьюзы - отмечены галочками или установлены в 1 ? это разные вещи.
Фьюзы отмечены галочками в PonyProg:
SUT1=1
CKSEL1=1
CKSEL0=1
Отмечены галочками. Я знаю, что это разные вещи. Прошу помочь разобраться что сделано не правильно.
Приведите скриншот окна установки фьюзов.
Цитата(vet @ Nov 1 2006, 10:13)

Приведите скриншот окна установки фьюзов.
Нажмите для просмотра прикрепленного файла
Помоему почти всё не правильно.
Код
#include <mega16.h>
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Place your code here
PORTA=~PORTA.0;
}
void main(void)
{
// Input/Output Ports initialization
// Port A initialization
PORTA=0b11111110;
DDRA = 0b00000001;
// Port B initialization
PORTB=0x00;
DDRB=0x00;
// Port C initialization
PORTC=0x00;
DDRC=0x00;
// Port D initialization
PORTD=0x00;
DDRD=0x00;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 3,906 kHz
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x05;
TCNT0=0x00;
OCR0=0x00;
// External Interrupt(s) initialization
MCUCR=0x00;
MCUCSR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x01;
ACSR=0x80;
SFIOR=0x00;
// Global enable interrupts
#asm("sei")
while (1)
{
// Place your code here
};
}
БЕЗ КВАРЦАCSEL3...0 = 0011 = слева на права - ( галка, галка, пусто, пусто) - (галка - это ноль - это сброшен)
SUT0 = галка, SUT1 = пусто или просто не трогаешь (оставляешь как есть)
Цитата(D H @ Nov 1 2006, 09:38)

Reset через 0,1 мф на землю.
Объясните пожалуйста, что неправильно сделал?
уж лучше reset "через" 10к на +5V
IgorKossak
Nov 1 2006, 08:23
Чтобы определиться с умолчаниями по отношению к фьюзам в том или ином программаторе, их иногда полезно прочитать.
Таким образом, по крайней мере, ничего не испортите.
Цитата($ilent @ Nov 1 2006, 10:58)

Помоему почти всё не правильно.
Код
#include <mega16.h>
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Place your code here
PORTA=~PORTA.0;
}
void main(void)
{
// Input/Output Ports initialization
// Port A initialization
PORTA=0b11111110;
DDRA = 0b00000001;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x01;
ACSR=0x80;
SFIOR=0x00;
// Global enable interrupts
#asm("sei")
while (1)
{
// Place your code here
};
}
БЕЗ КВАРЦАCSEL3...0 = 0011 = слева на права - ( галка, галка, пусто, пусто) - (галка - это ноль - это сброшен)
SUT0 = галка, SUT1 = пусто или просто не трогаешь (оставляешь как есть)
Ситуация такая же. В VMLab все эмулируется. Прошиваю, тишина.
Цитата(D H @ Nov 1 2006, 12:20)

Ситуация такая же. В VMLab все эмулируется. Прошиваю, тишина.
Вы ресет к пяти вольтам хоть чем-нибудь тяните?
Цитата(Petka @ Nov 1 2006, 12:43)

Цитата(D H @ Nov 1 2006, 12:20)

Ситуация такая же. В VMLab все эмулируется. Прошиваю, тишина.
Вы ресет к пяти вольтам хоть чем-нибудь тяните?
Нет. Резистор отсутствовал. Поставил и все запустилось. Огромное спасибо. Начало положено.
Надо отдать должное дружелюбию и стремлению помочь новичку. Ваш форум был третий, где я задал вопрос и, что самое главное, получил внятный ответ. На остальных форумах ответы были такого характера : "Пиши на асме и все будет понятно".
Еще раз огромное спасибо.
junoSynthesizer
Nov 1 2006, 15:28
давно уже хотел спросит форумчан, да всё новую тему не хочется открывать =)
раз уж здесь оказалось дело в ресете... скажите мне:
я экспериментально установил, что ресет, висящий в воздухе, прекрасно позволяет работать атмеге. сделал уже не одно любительское устройство (на профессионализм пока и не претендую), которые работают и под капотом машины, и в комнатных условиях... и ещё не разу не сталкивался с проблемами.
если мне надо хардварный ресет, то просто кидаю кнопку с ресета на землю. и прекрасно работает!
так вот вопрос: чем мне это грозит в будущем? =)
Если провод от ноги Reset никуда не идет, то ничем не грозит, а если идет - пониженной помехоустройчивостью. Там внутренняя подтяжка 30-60 КОм, это многовато для длинной линии в условиях сильных помех.
junoSynthesizer
Nov 1 2006, 20:56
от рисета идёт, на разъём программирования... буду его обрубать на пп после прошивки =)
Цитата(junoSynthesizer @ Nov 1 2006, 23:56)

от рисета идёт, на разъём программирования... буду его обрубать на пп после прошивки =)
лучше всего ресет напрямую заправить на +5В. при внутрисхемном программировании это не годится, поэтому не напрямую а кОм через 1-10.
Persona
Nov 2 2006, 18:42
Конечно антенну из RESET лучше не делать. Но если помехи "достают", то надо с RESET-ом считаться и фильтр. емкость поближе к корпусу повесить, чтобы не все так близко принимал с "эфира".
При "грязном" питании 10к резистор (с RESET на пит.) - прямой мост для помех и гарантия случайного сброса.
Когда мониторинг события СБРОС не проводить, то может возникать мнение, что ложных сбросов никогда и не было...
Цитата(Persona @ Nov 2 2006, 21:42)

Конечно антенну из RESET лучше не делать. Но если помехи "достают", то надо с RESET-ом считаться и фильтр. емкость поближе к корпусу повесить, чтобы не все так близко принимал с "эфира".
При "грязном" питании 10к резистор (с RESET на пит.) - прямой мост для помех и гарантия случайного сброса.
Вот для случая "грязного" или плохого питания как раз ресет и НАДО ОБЯЗАТЕЛЬНО вешать на питание. А то представьте себе, скокануло питание, часть периферии сбойнуло, память слетела, а контроллер не перазапустился! вот здорово! это называете надёжной работой?
Persona
Nov 4 2006, 13:47
Ну ничего себе! Что же так питание скачет, что все сбоит и слетает? Тогда надо UPS ставить. Если МК будет перезапускаться, то и сбой некому заметить будет и маячок зажечь..
Harbinger
Nov 4 2006, 15:53
Так "маячок" же можно в процедуру инициализации вписать
Ну если зашла речь о питании, то расскажите кто как делает. Если на одной платке с контроллером стоит, управляемая им, нагрузка с током до 0,3А то как быть? А если бузер 25 Ом при частоте 2400 Гц управляется меандром и длинна проводника от него до контроллера не более 3 см? Какие мнения? Питание от раздельных стабилизаторов не обсуждаем, понятно, что это лекарство...
Harbinger
Nov 5 2006, 13:30
Для буззера - RC-фильтр. 10 Ом/100 мкФ. И, имхо, неприлично такие вещи прямо на порт контроллера вешать

Даже китайцы на транзисторах не экономят.
Сейчас вот на одном стабилизаторе висит контроллер и нагрузка с пиковым током потребления 2 А (GSM-модуль). Ничего, работают. DC/DC 3,6 В, на выходе 470 мкФ, модуль отвязан супрессором+220 мкФ тантал+0,1 мкФ керамический.
Конечно не на порту такая нагрузка. Конечно есть транзистор. Интересуют оригинальные решения. Стандартные мне известны. Ну вот скажем, не будет ли проще отфильтровать питание самого контроллера, а не таких нагрузок? Ток контроллера ведь намного меньше. И конечно развязаться по току транзисторами. я прав?
И еще. Кто-нибудь сталкивался с изменением частоты встроенного генератора контроллера при изменении напряжения питания (кварца нет)? А питание и температура одновременно? Даташит смотрел, но толком пока ничего не ясно. Как на практике?
Dog Pawlowa
Nov 6 2006, 11:15
Цитата(smk @ Nov 6 2006, 13:48)

Интересуют оригинальные решения.
Философское...
Вообще-то придумать оригинальное решение в технике практически невозможно.
Все уже давно кем-то придумано, и даже по несколько раз.
Нучиться использовать придуманное - уже не зря жизнь сложилась.
Согласен. Хотя, совершенству нет предела. Оригинальность заключается, в данном случае, в способе обеспечить надежную работоспособность устройства.
Terapefft
Nov 7 2006, 13:49
сори за офтоп, подскажите пожалуста почему при компилировании в АВР студио 4.12 проги для меги8, он ругается на строку:
st y+,yh ;
пишет типа:
C:\avr\avtomat\AVT.asm(2121): error: Operands may cause undefined behaviour
Цитата(Terapefft @ Nov 7 2006, 16:49)

сори за офтоп, подскажите пожалуста почему при компилировании в АВР студио 4.12 проги для меги8, он ругается на строку:
st y+,yh ;
пишет типа:
C:\avr\avtomat\AVT.asm(2121): error: Operands may cause undefined behaviour
Очевидно он считает что результат отерации может быть различным Иными словами что будет и по какому адресу сохранится Например
1 high(y) по адресу y
2 high(y+1) по адресу y
и так далее
А вот почему ето error а не warning не знаю
Цитата(Terapefft @ Nov 7 2006, 13:49)

сори за офтоп, подскажите пожалуста почему при компилировании в АВР студио 4.12 проги для меги8, он ругается на строку:
st y+,yh ;
пишет типа:
C:\avr\avtomat\AVT.asm(2121): error: Operands may cause undefined behaviour
Видимо потому, что во время выполнения атомарной (неделимой) операции yh может измениться из-за наличия переноса из yl.
В документе doc085е (с. 139) указывается, что результат следующих инструкций не определен.
Код
1. st y+,r28
2. st y+,r29
3. st -y,r28
4. st -y,r29
Terapefft
Nov 8 2006, 05:58
как мне лучше поступить в этой ситуации? подскажите пожалуста
Nanobyte
Nov 8 2006, 09:49
Цитата(Terapefft @ Nov 8 2006, 09:58)

как мне лучше поступить в этой ситуации? подскажите пожалуста
Использовать отдельные команды:
ST Y,YH
ADIW YL,1
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.