CodeVision AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
ChipKiller
Сверлит текстолит когтями
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

Re: CodeVision AVR в вопросах и ответах

Сообщение ChipKiller »

ИМХО лучше начать с теории - http://ipg.h1.ru/ebooks/ci/ebook01/ebook01.html. Когда-то читал это в бумажном варианте....
Аватара пользователя
Garin
Потрогал лапой паяльник
Сообщения: 351
Зарегистрирован: Пн сен 12, 2011 12:13:46

Re: CodeVision AVR в вопросах и ответах

Сообщение Garin »

Здравствуйте.
Подскажите как можно упростить, вот такую арифметику

Код: Выделить всё

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 в вопросах и ответах

Сообщение ChipKiller »

Подскажите как можно упростить, вот такую арифметику
.. наверное вспомнить про 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];}
Аватара пользователя
Garin
Потрогал лапой паяльник
Сообщения: 351
Зарегистрирован: Пн сен 12, 2011 12:13:46

Re: CodeVision AVR в вопросах и ответах

Сообщение Garin »

Да я то про него помню, да про другое забыл... знак плюс ((((

Summa+=Kontrol[cnt];

ChipKiller Спасибо большое , помогли.
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Re: CodeVision AVR в вопросах и ответах

Сообщение ibiza11 »

:facepalm: :dont_know:
Ставим плюсы: )
DmitriyEA
Открыл глаза
Сообщения: 54
Зарегистрирован: Пт окт 12, 2012 11:19:16

Re: CodeVision AVR в вопросах и ответах

Сообщение DmitriyEA »

Здравствуйте. Помогите, я делаю только первые шаги в программирование МК.
Хочу сделать: два МК(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 в вопросах и ответах

Сообщение ibiza11 »

Вы перепутали номер бита и его значение.

PORTC.0 = 0 - установка бита 0 в лог.0
PORTC.0 = 1 - установка бита 0 в лог.1
PORTC.1 = 0 - установка бита 1 в лог.0
PORTC.1 = 1 - установка бита 1 в лог.1
Ставим плюсы: )
DmitriyEA
Открыл глаза
Сообщения: 54
Зарегистрирован: Пт окт 12, 2012 11:19:16

Re: CodeVision AVR в вопросах и ответах

Сообщение DmitriyEA »

А можете поподробней где я перепутал, не могу понять.
Аватара пользователя
C@at
Вымогатель припоя
Сообщения: 652
Зарегистрирован: Вс ноя 13, 2011 16:42:05
Откуда: Украина

Re: CodeVision AVR в вопросах и ответах

Сообщение C@at »

Вам удочку дают, а вы рыбу просите, не знаю кто это сказал но ... вот ваша РЫБА:-)))))

Код: Выделить всё

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 в вопросах и ответах

Сообщение Darti »

Всегда подключал жк дисплей в CAVR по схеме:
RS - PD0
RW - PD1
E - PD2
D4- PD4
...
D7-PD7
В данный момент понадобилось изменить на
RS - PD2
RW - GND
E - PD3
D4- PD4
...
D7-PD7
Возможно ли это сделать в cavr1.25.
kentik
Грызет канифоль
Сообщения: 252
Зарегистрирован: Пт апр 05, 2013 09:55:02

Re: CodeVision AVR в вопросах и ответах

Сообщение kentik »

Darti писал(а):В данный момент понадобилось изменить на
RW - GND

это как?
Аватара пользователя
C@at
Вымогатель припоя
Сообщения: 652
Зарегистрирован: Вс ноя 13, 2011 16:42:05
Откуда: Украина

Re: CodeVision AVR в вопросах и ответах

Сообщение C@at »

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 в вопросах и ответах

Сообщение Darti »

kentik писал(а):
Darti писал(а):В данный момент понадобилось изменить на
RW - GND

это как?

Придумано не мной, на отладочной доске EasyAVR6 сделано именно так, с ихними примерами все шикарно работает. Мне же хотелось бы запустить с codevision.
a_skr
Вымогатель припоя
Сообщения: 630
Зарегистрирован: Пн июн 14, 2010 13:07:29
Откуда: Жуковский

Re: CodeVision AVR в вопросах и ответах

Сообщение a_skr »

а в чем проблема? соедините RW с корпусом. у Вас нет свободного пина, на который повесить RD в конфигураторе CodeVision?
Darti
Первый раз сказал Мяу!
Сообщения: 25
Зарегистрирован: Пн июл 23, 2012 20:46:11
Откуда: spb
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение Darti »

a_skr писал(а):а в чем проблема? соедините RW с корпусом. у Вас нет свободного пина, на который повесить RD в конфигураторе CodeVision?

Обратите внимание что ножки смещены в отличие от стандартной конфигурации
RS - PD2
E - PD3
в CAVR1.25 можно выбрать только порт к которому будет подключен экран, выбрать пины нельзя, но наверно их можно изменить в либе, собственно и вопрос возможно ли их поменять или нет?

UPDATE: как менять пины нашел в lcd.lib все меняется, осталось только понять как посадить ножку RW на землю.
a_skr
Вымогатель припоя
Сообщения: 630
Зарегистрирован: Пн июн 14, 2010 13:07:29
Откуда: Жуковский

Re: CodeVision AVR в вопросах и ответах

Сообщение a_skr »

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 в вопросах и ответах

Сообщение Darti »

a_skr писал(а):
Darti писал(а):UPDATE: как менять пины нашел в lcd.lib все меняется, осталось только понять как посадить ножку RW на землю.

паяльником ;)
я почему спросил, Вам надо освободить ножку, чтобы библиотека ее не использовала, потому что свободных нет? если свободные есть и Вы нашли, как их поменять в либе, то поставьте любую свободную. пусть в воздухе висит.

Свободных нет, нужно чтобы либа ее не использовала. Со свободными разобрался, но этот вариант не устраивает. Если просто повесить в воздух, то не работает, так же как если посадить на землю. Нужно именно что то поправить в либе, чтобы экран работал только на чтение
Кстати, ваше последнее предположение похоже на правду, шпротеус выдает "controller received command whilst busy"
a_skr
Вымогатель припоя
Сообщения: 630
Зарегистрирован: Пн июн 14, 2010 13:07:29
Откуда: Жуковский

Re: CodeVision AVR в вопросах и ответах

Сообщение a_skr »

шпротеус выдает "controller received command whilst busy"
протеус решил, что дисплей занят, а контроллер им управляет. нужно вставить задержку вместо опроса готовности.
и почему бы не воспользоваться другой готовой библиотекой LCD вместо встроенной в протеус?
Darti
Первый раз сказал Мяу!
Сообщения: 25
Зарегистрирован: Пн июл 23, 2012 20:46:11
Откуда: spb
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение Darti »

a_skr писал(а):
шпротеус выдает "controller received command whilst busy"
протеус решил, что дисплей занят, а контроллер им управляет. нужно вставить задержку вместо опроса готовности.
и почему бы не воспользоваться другой готовой библиотекой LCD вместо встроенной в протеус?

какой именно?
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Re: CodeVision AVR в вопросах и ответах

Сообщение ibiza11 »

Изменено.
идите в соседнюю ветку, там этих библиотек - ешь нехочу.
Ставим плюсы: )
Ответить

Вернуться в «AVR»