CodeVision AVR в вопросах и ответах
- ChipKiller
- Сверлит текстолит когтями
- Сообщения: 1163
- Зарегистрирован: Ср янв 05, 2011 16:25:15
Re: CodeVision AVR в вопросах и ответах
ИМХО лучше начать с теории - http://ipg.h1.ru/ebooks/ci/ebook01/ebook01.html. Когда-то читал это в бумажном варианте....
Re: CodeVision AVR в вопросах и ответах
Здравствуйте.
Подскажите как можно упростить, вот такую арифметику
Просто в программе набирается больше 40 таких вариантов учета контрольных сумм, и размер кода из за них получается не слабый:-/
Подскажите как можно упростить, вот такую арифметику
Код: Выделить всё
unsigned char Kontrol[8]= {0,2,0,0,6,0,4,0 };
unsigned char Summa=0;
Summa=Kontrol[0]+Kontrol[1]+Kontrol[2]+Kontrol[3]+Kontrol[4]+Kontrol[5]+Kontrol[6]+Kontrol[7]; Просто в программе набирается больше 40 таких вариантов учета контрольных сумм, и размер кода из за них получается не слабый:-/
- ChipKiller
- Сверлит текстолит когтями
- Сообщения: 1163
- Зарегистрирован: Ср янв 05, 2011 16:25:15
Re: CodeVision AVR в вопросах и ответах
.. наверное вспомнить про for (while)Подскажите как можно упростить, вот такую арифметику
Код: Выделить всё
unsigned char Kontrol[8]= {0,2,0,0,6,0,4,0 };
unsigned char Summa, cnt;
Summa=0;
for(cnt=0;cnt<8;cnt++){ Summa+=Kontrol[cnt];}Re: CodeVision AVR в вопросах и ответах
Да я то про него помню, да про другое забыл... знак плюс ((((
Summa+=Kontrol[cnt];
ChipKiller Спасибо большое , помогли.
Summa+=Kontrol[cnt];
ChipKiller Спасибо большое , помогли.
Re: CodeVision AVR в вопросах и ответах
Здравствуйте. Помогите, я делаю только первые шаги в программирование МК.
Хочу сделать: два МК(Atmega8) соединены по USART, на одном жмешь кнопку на втором загорается светодиод, отпускаешь кнопку светодиод погасает. Пока что у меня получилось, жмешь на кнопку светодиод загорается, отпускаешь кнопку светодиод горит.
В визарде в закладке USART поставил (на обоих МК) Receiver, Transmitter, Baund Rate: 9600, Communication Parametrs: 8Data, 1Stop, No Parity, Mode: Asynchronous.
Вот код передатчика:
// Standard Input/Output functions
#include <stdio.h>
#include <delay.h>
// Declare your global variables here
void main(void)
{
// 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=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;
// Port C initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0xFF;
DDRC=0x00;
// 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: Timer 0 Stopped
TCCR0=0x00;
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
// Timer 1 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: 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=0x00;
// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 9600
UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x33;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
while (1)
{
if (PINC.0 == 0)
{putchar('W');};
if (PINC.1 == 0)
{putchar('S');};
};
}
А вот приемника:
// Standard Input/Output functions
#include <stdio.h>
// Declare your global variables here
void main(void)
{
char mail;
// 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=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;
// Port C initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0xFF;
// 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: Timer 0 Stopped
TCCR0=0x00;
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
// Timer 1 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: 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=0x00;
// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 9600
UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x33;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
while (1)
{
mail = getchar();
if (mail == 'W')
{PORTC.0 = 1;};
if (mail == 'S')
{PORTC.1 = 1;};
};
}
Пока это все что у меня получилось, перепробовал уже по всякому не как не получается.
В археве проекты приема, передачи и протеус.
Хочу сделать: два МК(Atmega8) соединены по USART, на одном жмешь кнопку на втором загорается светодиод, отпускаешь кнопку светодиод погасает. Пока что у меня получилось, жмешь на кнопку светодиод загорается, отпускаешь кнопку светодиод горит.
В визарде в закладке USART поставил (на обоих МК) Receiver, Transmitter, Baund Rate: 9600, Communication Parametrs: 8Data, 1Stop, No Parity, Mode: Asynchronous.
Вот код передатчика:
Спойлер
#include <mega8.h>// Standard Input/Output functions
#include <stdio.h>
#include <delay.h>
// Declare your global variables here
void main(void)
{
// 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=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;
// Port C initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0xFF;
DDRC=0x00;
// 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: Timer 0 Stopped
TCCR0=0x00;
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
// Timer 1 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: 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=0x00;
// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 9600
UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x33;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
while (1)
{
if (PINC.0 == 0)
{putchar('W');};
if (PINC.1 == 0)
{putchar('S');};
};
}
А вот приемника:
Спойлер
#include <mega8.h>// Standard Input/Output functions
#include <stdio.h>
// Declare your global variables here
void main(void)
{
char mail;
// 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=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;
// Port C initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0xFF;
// 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: Timer 0 Stopped
TCCR0=0x00;
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
// Timer 1 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: 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=0x00;
// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 9600
UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x33;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
while (1)
{
mail = getchar();
if (mail == 'W')
{PORTC.0 = 1;};
if (mail == 'S')
{PORTC.1 = 1;};
};
}
Пока это все что у меня получилось, перепробовал уже по всякому не как не получается.
В археве проекты приема, передачи и протеус.
- Вложения
-
- 1_project.zip
- (81.22 КБ) 125 скачиваний
- ibiza11
- Поставщик валерьянки для Кота
- Сообщения: 1900
- Зарегистрирован: Сб фев 21, 2009 13:11:40
- Откуда: Москва
Re: CodeVision AVR в вопросах и ответах
Вы перепутали номер бита и его значение.
PORTC.0 = 0 - установка бита 0 в лог.0
PORTC.0 = 1 - установка бита 0 в лог.1
PORTC.1 = 0 - установка бита 1 в лог.0
PORTC.1 = 1 - установка бита 1 в лог.1
PORTC.0 = 0 - установка бита 0 в лог.0
PORTC.0 = 1 - установка бита 0 в лог.1
PORTC.1 = 0 - установка бита 1 в лог.0
PORTC.1 = 1 - установка бита 1 в лог.1
Ставим плюсы: )
Re: CodeVision AVR в вопросах и ответах
А можете поподробней где я перепутал, не могу понять.
Re: CodeVision AVR в вопросах и ответах
Вам удочку дают, а вы рыбу просите, не знаю кто это сказал но ... вот ваша РЫБА:-)))))
Код: Выделить всё
while (1)
{
mail = getchar();
if (mail == 'W')
{PORTC.0 = 0;};
if (mail == 'S')
{PORTC.0 = 1;};
if (mail == 'W')
{PORTC.1 = 0;};
if (mail == 'S')
{PORTC.1 = 1;};
};-
Darti
- Первый раз сказал Мяу!
- Сообщения: 25
- Зарегистрирован: Пн июл 23, 2012 20:46:11
- Откуда: spb
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Всегда подключал жк дисплей в CAVR по схеме:
RS - PD0
RW - PD1
E - PD2
D4- PD4
...
D7-PD7
В данный момент понадобилось изменить на
RS - PD2
RW - GND
E - PD3
D4- PD4
...
D7-PD7
Возможно ли это сделать в cavr1.25.
RS - PD0
RW - PD1
E - PD2
D4- PD4
...
D7-PD7
В данный момент понадобилось изменить на
RS - PD2
RW - GND
E - PD3
D4- PD4
...
D7-PD7
Возможно ли это сделать в cavr1.25.
Re: CodeVision AVR в вопросах и ответах
Darti писал(а):В данный момент понадобилось изменить на
RW - GND
это как?
Re: CodeVision AVR в вопросах и ответах
Darti писал(а):Возможно ли это сделать в cavr1.25.
Нет проблем, возможно, пример есть здесь http://my-avr.at.ua/load/library_for_hd ... d/1-1-0-34
-
Darti
- Первый раз сказал Мяу!
- Сообщения: 25
- Зарегистрирован: Пн июл 23, 2012 20:46:11
- Откуда: spb
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
kentik писал(а):Darti писал(а):В данный момент понадобилось изменить на
RW - GND
это как?
Придумано не мной, на отладочной доске EasyAVR6 сделано именно так, с ихними примерами все шикарно работает. Мне же хотелось бы запустить с codevision.
Re: CodeVision AVR в вопросах и ответах
а в чем проблема? соедините RW с корпусом. у Вас нет свободного пина, на который повесить RD в конфигураторе CodeVision?
-
Darti
- Первый раз сказал Мяу!
- Сообщения: 25
- Зарегистрирован: Пн июл 23, 2012 20:46:11
- Откуда: spb
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
a_skr писал(а):а в чем проблема? соедините RW с корпусом. у Вас нет свободного пина, на который повесить RD в конфигураторе CodeVision?
Обратите внимание что ножки смещены в отличие от стандартной конфигурации
RS - PD2
E - PD3
в CAVR1.25 можно выбрать только порт к которому будет подключен экран, выбрать пины нельзя, но наверно их можно изменить в либе, собственно и вопрос возможно ли их поменять или нет?
UPDATE: как менять пины нашел в lcd.lib все меняется, осталось только понять как посадить ножку RW на землю.
Re: CodeVision AVR в вопросах и ответах
Darti писал(а):UPDATE: как менять пины нашел в lcd.lib все меняется, осталось только понять как посадить ножку RW на землю.
паяльником
я почему спросил, Вам надо освободить ножку, чтобы библиотека ее не использовала, потому что свободных нет? если свободные есть и Вы нашли, как их поменять в либе, то поставьте любую свободную. пусть в воздухе висит.
PS. хотя, может не получится, если библиотека опрашивает готовность дисплея.
Последний раз редактировалось a_skr Ср май 22, 2013 11:14:01, всего редактировалось 1 раз.
-
Darti
- Первый раз сказал Мяу!
- Сообщения: 25
- Зарегистрирован: Пн июл 23, 2012 20:46:11
- Откуда: spb
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
a_skr писал(а):Darti писал(а):UPDATE: как менять пины нашел в lcd.lib все меняется, осталось только понять как посадить ножку RW на землю.
паяльником
я почему спросил, Вам надо освободить ножку, чтобы библиотека ее не использовала, потому что свободных нет? если свободные есть и Вы нашли, как их поменять в либе, то поставьте любую свободную. пусть в воздухе висит.
Свободных нет, нужно чтобы либа ее не использовала. Со свободными разобрался, но этот вариант не устраивает. Если просто повесить в воздух, то не работает, так же как если посадить на землю. Нужно именно что то поправить в либе, чтобы экран работал только на чтение
Кстати, ваше последнее предположение похоже на правду, шпротеус выдает "controller received command whilst busy"
Re: CodeVision AVR в вопросах и ответах
протеус решил, что дисплей занят, а контроллер им управляет. нужно вставить задержку вместо опроса готовности.шпротеус выдает "controller received command whilst busy"
и почему бы не воспользоваться другой готовой библиотекой LCD вместо встроенной в протеус?
-
Darti
- Первый раз сказал Мяу!
- Сообщения: 25
- Зарегистрирован: Пн июл 23, 2012 20:46:11
- Откуда: spb
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
a_skr писал(а):протеус решил, что дисплей занят, а контроллер им управляет. нужно вставить задержку вместо опроса готовности.шпротеус выдает "controller received command whilst busy"
и почему бы не воспользоваться другой готовой библиотекой LCD вместо встроенной в протеус?
какой именно?
- ibiza11
- Поставщик валерьянки для Кота
- Сообщения: 1900
- Зарегистрирован: Сб фев 21, 2009 13:11:40
- Откуда: Москва
Re: CodeVision AVR в вопросах и ответах
Ставим плюсы: )
