CodeVision AVR в вопросах и ответах
- pashaumnov
- Прорезались зубы
- Сообщения: 236
- Зарегистрирован: Чт июн 25, 2009 16:00:25
- Откуда: нижний новгород
Re: CodeVision AVR в вопросах и ответах
спасибо большое , буду дома сегодня разбираться с симулятором, что бы наглядно видеть какая сторчка что делает. оказывается как можно просто все написать , а я то нагородил((((
Re: CodeVision AVR в вопросах и ответах
Схемно можно обойтись и без регистра :

- Вложения
-
- Tiny13.JPG
- (9.34 КБ) 694 скачивания
Re: CodeVision AVR в вопросах и ответах
И как тут все 6 зажечь?
Re: CodeVision AVR в вопросах и ответах
Да, заблуждился на слове "поочерёдно"
Думал : следующий зажёгся -- предыдущий погас. Беру свой салют обратно
Но не прошло без пользы -- скачал доку на тиню13. Пущай будет 
Хотя, конечно, можно и динамически... Но это уже чересчур !
Хотя, конечно, можно и динамически... Но это уже чересчур !
- pashaumnov
- Прорезались зубы
- Сообщения: 236
- Зарегистрирован: Чт июн 25, 2009 16:00:25
- Откуда: нижний новгород
Re: CodeVision AVR в вопросах и ответах
к тому же регистр сдвиговый стоит 7 рублей , не такие уж и большие деньги. а тинька 13 у нас 25р соит.очень гуманно.)))думал только памяти маловато а как оказалось можно код очень грамотно написать и код становится очень даже коротеньким. думаю с опытом придет и у меня такое))) всем спасибо .
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Ещё можно уменьшить я так думаю. Если применить таймер ( Как минимум в 255 раз меньше нопов будет
) и функцию выделить из похожих елементов.
- pashaumnov
- Прорезались зубы
- Сообщения: 236
- Зарегистрирован: Чт июн 25, 2009 16:00:25
- Откуда: нижний новгород
Re: CodeVision AVR в вопросах и ответах
a_skr писал(а):22.3% (char - 8 бит). Кто меньше?
код не работает , при включении на portb.1 устанавливается еденица , больше не каких действий не происходи.(((потом через некоторое время порт устанавливается 0((((
- pashaumnov
- Прорезались зубы
- Сообщения: 236
- Зарегистрирован: Чт июн 25, 2009 16:00:25
- Откуда: нижний новгород
Re: CodeVision AVR в вопросах и ответах
vitalik_1984 писал(а):Ещё можно уменьшить я так думаю. Если применить таймер ( Как минимум в 255 раз меньше нопов будет ) и функцию выделить из похожих елементов.
можете написать алгоритм работы с таймером ??
Re: CodeVision AVR в вопросах и ответах
Логично. Мультиметром меряете? Схему подключения, осциллограмму PB0, PB1, PB2 приведите.pashaumnov писал(а):код не работает , при включении на portb.1 устанавливается еденица , больше не каких действий не происходи.(((потом через некоторое время порт устанавливается 0((((
Можно поподробней? В приведенной программе ни одного NOP'аvitalik_1984 писал(а):Ещё можно уменьшить я так думаю. Если применить таймер ( Как минимум в 255 раз меньше нопов будет) и функцию выделить из похожих елементов.
- pashaumnov
- Прорезались зубы
- Сообщения: 236
- Зарегистрирован: Чт июн 25, 2009 16:00:25
- Откуда: нижний новгород
Re: CodeVision AVR в вопросах и ответах
сегодня еще раз попробую, немного другая схема подключения у меня выход OE у 74ch595 подключена к минусу.как попробую так отпишусь.
- pashaumnov
- Прорезались зубы
- Сообщения: 236
- Зарегистрирован: Чт июн 25, 2009 16:00:25
- Откуда: нижний новгород
Re: CodeVision AVR в вопросах и ответах
да мр к плюсу подключена.
Re: CodeVision AVR в вопросах и ответах
Ребята подскажите, что я сделал неправильно
Задание
#include <delay.h>
char k,p=0;
// Analog Comparator interrupt service routine
interrupt [ANA_COMP] void ana_comp_isr(void)
{
// Place your code here
p=~p; //инверсия
if (ACSR==0x0A){ACSR=0x0B; }
else {ACSR=0x0A;};
k=0;
}
// Declare your global variables here
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port A 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
PORTA=0x00;
DDRA=0x00;
// Port B initialization
// Func7=In Func6=In Func5=In Func4=Out Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=0 State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x10; //подключене вывода 4 на выход (динамик)
// Port C initialization
// Func7=In Func6=Out Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=0 State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x02; // подключения вывода 1 (ключ К4)
// Port D initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTD=0x00;
DDRD=0xFF; // весь порт на выход (данные индикатора)
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=0xFF
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=0xFFFF
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
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: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
// USART initialization
// USART disabled
UCSRB=0x00;
// Analog Comparator initialization
// Analog Comparator: On
// Interrupt on Output Toggle
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x0A; // включение компаратора
SFIOR=0x00;
// ADC initialization
// ADC disabled
ADCSRA=0x00;
// SPI initialization
// SPI disabled
SPCR=0x00;
// TWI initialization
// TWI disabled
TWCR=0x00;
// Global enable interrupts
#asm("sei")
PORTC.1=1; // разрешение на 0 индикатор (K4)
PORTD=0xF3;
while (1)
{
// Place your code here
if (p==1){
PORTD=0x42; // происходит отображение на индикаторе
if(k==0){
PORTB.4=1; // включается звуковой сигнал
delay_ms(100);
PORTB.4=0; // выключается звуковой сигнал
k=1;
};
}
else{
PORTD=0xF3;
};//else
}
}
В общем, когда проверяю на лабораторном стенде, не выполняется условие "Когда происходит превышение порогового уровня – на протяжении 100мс звучит звуковой сигнал с частотой F=2,4 кгЦ и на семисегментный светодиодный индикатор (HL2) выводится цифра «1»."
Есть подозрение, что-то я сделал не так в :
interrupt [ANA_COMP] void ana_comp_isr(void)
{
// Place your code here
p=~p; //инверсия
if (ACSR==0x0A){ACSR=0x0B; }
else {ACSR=0x0A;};
k=0;
Подскажите пожалуйста
Задание
Спойлер
В исходном состоянии в младшем разряде семисегментного све-тодиодного индикатора (HL2) отображается цифра «0» и программа ожидает превышения напряжением на положительном входе аналогового компаратора напряжения на отрицательном входе (порогового напряжения). Когда происходит превышение порогового уровня – на протяжении 100мс звучит звуковой сигнал с частотой F=2,4 кгЦ и на семисегментный светодиодный индикатор (HL2) выводится цифра «1». После снижения напряжения на положительном входе аналогового компаратора ниже порогового уровня программа переходит в исходное состояние.Спойлер
#include <mega16.h>#include <delay.h>
char k,p=0;
// Analog Comparator interrupt service routine
interrupt [ANA_COMP] void ana_comp_isr(void)
{
// Place your code here
p=~p; //инверсия
if (ACSR==0x0A){ACSR=0x0B; }
else {ACSR=0x0A;};
k=0;
}
// Declare your global variables here
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port A 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
PORTA=0x00;
DDRA=0x00;
// Port B initialization
// Func7=In Func6=In Func5=In Func4=Out Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=0 State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x10; //подключене вывода 4 на выход (динамик)
// Port C initialization
// Func7=In Func6=Out Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=0 State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x02; // подключения вывода 1 (ключ К4)
// Port D initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTD=0x00;
DDRD=0xFF; // весь порт на выход (данные индикатора)
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=0xFF
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=0xFFFF
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
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: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
// USART initialization
// USART disabled
UCSRB=0x00;
// Analog Comparator initialization
// Analog Comparator: On
// Interrupt on Output Toggle
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x0A; // включение компаратора
SFIOR=0x00;
// ADC initialization
// ADC disabled
ADCSRA=0x00;
// SPI initialization
// SPI disabled
SPCR=0x00;
// TWI initialization
// TWI disabled
TWCR=0x00;
// Global enable interrupts
#asm("sei")
PORTC.1=1; // разрешение на 0 индикатор (K4)
PORTD=0xF3;
while (1)
{
// Place your code here
if (p==1){
PORTD=0x42; // происходит отображение на индикаторе
if(k==0){
PORTB.4=1; // включается звуковой сигнал
delay_ms(100);
PORTB.4=0; // выключается звуковой сигнал
k=1;
};
}
else{
PORTD=0xF3;
};//else
}
}
В общем, когда проверяю на лабораторном стенде, не выполняется условие "Когда происходит превышение порогового уровня – на протяжении 100мс звучит звуковой сигнал с частотой F=2,4 кгЦ и на семисегментный светодиодный индикатор (HL2) выводится цифра «1»."
Есть подозрение, что-то я сделал не так в :
Спойлер
// Analog Comparator interrupt service routineinterrupt [ANA_COMP] void ana_comp_isr(void)
{
// Place your code here
p=~p; //инверсия
if (ACSR==0x0A){ACSR=0x0B; }
else {ACSR=0x0A;};
k=0;
Подскажите пожалуйста

- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Интересный вопрос ...
"Есть некое задание, но его условие у меня не выполняется. В чём проблема ?"
Как Вы думаете, что можно ответить на это ?
"Есть некое задание, но его условие у меня не выполняется. В чём проблема ?"
Как Вы думаете, что можно ответить на это ?
Re: CodeVision AVR в вопросах и ответах
Аlex писал(а):Интересный вопрос ...![]()
"Есть некое задание, но его условие у меня не выполняется. В чём проблема ?"
Как Вы думаете, что можно ответить на это ?
Я хотел сказать: "Правильно я сделал код или нет ?" в плане соответствия с заданием.
Я просто чайник, во всём этом деле
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Ну, видимо неправильно, если Ваша программа не удовлетворяет условию задания 
Re: CodeVision AVR в вопросах и ответах
Аlex писал(а):Ну, видимо неправильно, если Ваша программа не удовлетворяет условию задания
Ну тогда подскажите, что неправильно, я хотя бы буду знать в каком направлений рыть.
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Как раз это Вы должны сами найти и спросить тут : "Почему у меня вот это не работает так, как должно работать"BMO писал(а):Ну тогда подскажите, что неправильно
Вы - хозяин кода, Вы должны отлично понимать, что этот код делает и что должно происходить. Возьмите отладчик, погоняйте код, проанализируйте, выловите проблемную часть.
Ну нельзя на форум вываливать кусище кода, в котором люди будут сидеть и разбираться, и сказать - "у меня этот код не работает, где там проблема ?". Тем более, не описав нормально проблему.
Как она у Вас не работает, что конкретно и какая часть условия не работает, ... ? Вы может питание не подали на устройство
ЗЫ: И перестаньте полностью цитировать предыдущее сообщение, на этом форум это запрещено !
- pashaumnov
- Прорезались зубы
- Сообщения: 236
- Зарегистрирован: Чт июн 25, 2009 16:00:25
- Откуда: нижний новгород
Re: CodeVision AVR в вопросах и ответах
a_skr писал(а): Схему подключения, осциллограмму PB0, PB1, PB2 приведите.
проверил еще раз , код рабочий, беру свои слова обратно. извините за то что дезинформировал вас. у меня были не правильно ножки подключены к сдвиговому регистру порт Б1 был подключен к sh-cp еще раз извините. все отлично работает , спасибо .