T O S H KA писал(а):нет я конечно понимаю, что в этом вопросе руки у меня кривые... но 50 $ у меня нет((( я разобраться пытаюсь, но не работает(( нет если есть у кого проги дайте для примера....заранее спасибо
Что я не вижу Ваших попыток разобраться. Покажите их, поможем.
Для примера - http://avr.inf.ua/timer_v2.htmlhttp://avr.inf.ua/clock.html
По первой ссылке таймер по второй пример работы с индикаторами. Только это примеры...сейчас бы я это всё по другому сделал)
50$ нету... А сколько есть?
вот программа мы с другом написали что не так часы не работуют почему?? почему цифры мерцают? нормально на индикатор не выводятся вообщем не работуют!! подскажите
/*****************************************************
Chip type : ATmega8
Program type : Application
AVR Core Clock frequency: 8,000000 MHz
*****************************************************/
#include <mega8.h>
unsigned int k;
unsigned int i;
unsigned int sek;
unsigned int min1;
unsigned int min2;
unsigned int hour1;
unsigned int hour2;
unsigned char number[]= {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Place your code here
if(sek==60) // если сек = 60
{
min1++; // добавляем 1 к переменной "минута"
sek=0; // зануляем переменную "секунда"
}
if(min1==10) // если мин = 60
{
min2++; // добавляем 1 к переменной "час"
min1=0; // зануляем переменную "минута"
}
if(min2==6) // если мин = 60
{
hour1++; // добавляем 1 к переменной "час"
min2=0; // зануляем переменную "минута"
}
if(hour1==10) // если мин = 60
{
hour2++; // добавляем 1 к переменной "час"
hour1=0; // зануляем переменную "минута"
}
k++;
if (k==3) {i++;k=1;}
if (i==5) {i=1;}
if (i==1) {PORTD.0=1;
PORTD.1=1;
PORTD.2=1;
PORTD.3=0;
PORTB= number[min1];}
if (i==2) {PORTD.0=1;
PORTD.1=1;
PORTD.2=0;
PORTD.3=1;
PORTB= number[min2];}
if (i==3) {PORTD.0=1;
PORTD.1=0;
PORTD.2=1;
PORTD.3=1;
PORTB= number[hour1];}
if (i==4) {PORTD.0=0;
PORTD.1=1;
PORTD.2=1;
PORTD.3=1;
PORTB= number[hour2];}
T O S H KA писал(а):нет я конечно понимаю, что в этом вопросе руки у меня кривые... но 50 $ у меня нет((( я разобраться пытаюсь, но не работает(( нет если есть у кого проги дайте для примера....заранее спасибо
Что я не вижу Ваших попыток разобраться. Покажите их, поможем.
Для примера - http://avr.inf.ua/timer_v2.htmlhttp://avr.inf.ua/clock.html
По первой ссылке таймер по второй пример работы с индикаторами. Только это примеры...сейчас бы я это всё по другому сделал)
50$ нету... А сколько есть?
А сколько надо? я то думал мы как то все братья человеки и т.п.
Тег сверху от текста сообщения.
Мерцают - значит малая частота для динамической индикации. Для 4 разрядов нужна частота таймера от 280Гц.
Пример динамической индикации есть тут http://avru.cwx.ru/uchebnik/7sigmentnik ... d_avr.html
Извиняйте но сейчас просто нет времени Вам всё расписывать, возможно вечером.
А если не осилите то или собирайте $ или начните с чего то попроще
Я бы сделал это всё на двух отдельных таймерах, первый обеспечивает динамическую индикацию, второй считает время. Народ, а дайте не заси*** тему если уже пошло дело на то что нужен таймер...всё же здесь вопросы по CVAVR
Здравствуйте.
Я сейчас пытаюсь вникнуть в функцию самопрограммирования(self-program) и у меня возникает несколько вопросов:
1. Область памяти AVR(Мега32 и М64) разделена на 2 секции- RWW и NRWW. Может ли код приложения(т.е. из секции RWW) использовать инструкции SPM и LPM для самомодофикации? Просто везде рассмотрен только случай когда независимый загрузчик из NRWW переписывает всю флешь в RWW, а мне же надо изменить только небольшую часть программы(таблицы данных).
2. CVAVR и его линкер судя по документации не имеют дирректив или настроек для размещения разных подпрограмм по жестко фиксированным адресам(например для подпрограммы-загрузчика в памяти NRWW). Я знаю, что в AVRASM для этого есть дирректива .ORG. Я написал внутри функции ассемблерную вставку:
Дизассемблер сказал, что функция теперь находится по указанному адресу. Однако меня интересует поведение компилятора, ведь при вызове этой функции он может использовать инструкции с ограниченной областью действия(типа относительных переходов PC+). Учитывает ли С компилятор CVAVR при вызове подпрограмм диррективы ORG чтобы ф-ция была в пределах досягаемости?
во-первых, если следовать стандарту языка Си, то ответ неопределен, т.к. стандарт не устанавливает порядка вычисления операндов в выражении. если учесть, что CVAVR не очень озабочен соблюдением стандартов, можно предположить, что вычисляться будет слева направо - но это чисто мои домыслы.
кстати, вы вообще точно уверены, что "посредине" у вас должен быть оператор &, а не && ?
битва с дураками проиграна, победители торжествуют. слава победителям!
Мастер Ломастер писал(а):
кстати, вы вообще точно уверены, что "посредине" у вас должен быть оператор &, а не && ?
скорее всего так и должно быть &&, но работает и с 1 -м &, видимо компилятор об этом не задумывается....
работать-то может и работает, и даже понятно, почему именно (компилятор ни при чем)... но вообще это не хорошо - битовые и логические опреации это разные вещи! тем более что стандарт Си, если я не ошибаюсь, не устанавливает однозначно, что истинным выражением логической операции всегда должно быть число 1 - по идее может быть ЛЮБОЕ НЕНУЛЕВОЕ число, и тогда разница в работе & и && будет очень заметна.
битва с дураками проиграна, победители торжествуют. слава победителям!