Страница 261 из 421

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

Добавлено: Вт май 14, 2013 15:03:27
ChipKiller
ИМХО лучше начать с теории - http://ipg.h1.ru/ebooks/ci/ebook01/ebook01.html. Когда-то читал это в бумажном варианте....

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

Добавлено: Пн май 20, 2013 10:53:25
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 таких вариантов учета контрольных сумм, и размер кода из за них получается не слабый:-/

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

Добавлено: Пн май 20, 2013 11:12:51
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];}

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

Добавлено: Пн май 20, 2013 11:20:50
Garin
Да я то про него помню, да про другое забыл... знак плюс ((((

Summa+=Kontrol[cnt];

ChipKiller Спасибо большое , помогли.

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

Добавлено: Пн май 20, 2013 13:37:12
ibiza11
:facepalm: :dont_know:

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

Добавлено: Вт май 21, 2013 11:58:09
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;};

};
}
Пока это все что у меня получилось, перепробовал уже по всякому не как не получается.
В археве проекты приема, передачи и протеус.

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

Добавлено: Вт май 21, 2013 12:07:05
ibiza11
Вы перепутали номер бита и его значение.

PORTC.0 = 0 - установка бита 0 в лог.0
PORTC.0 = 1 - установка бита 0 в лог.1
PORTC.1 = 0 - установка бита 1 в лог.0
PORTC.1 = 1 - установка бита 1 в лог.1

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

Добавлено: Вт май 21, 2013 12:31:33
DmitriyEA
А можете поподробней где я перепутал, не могу понять.

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

Добавлено: Вт май 21, 2013 12:46:38
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;};
      };

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

Добавлено: Вт май 21, 2013 16:20:58
Darti
Всегда подключал жк дисплей в CAVR по схеме:
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 в вопросах и ответах

Добавлено: Ср май 22, 2013 08:03:04
kentik
Darti писал(а): В данный момент понадобилось изменить на
RW - GND
это как?

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

Добавлено: Ср май 22, 2013 08:12:43
C@at
Darti писал(а): Возможно ли это сделать в cavr1.25.
Нет проблем, возможно, пример есть здесь http://my-avr.at.ua/load/library_for_hd ... d/1-1-0-34

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

Добавлено: Ср май 22, 2013 09:54:24
Darti
kentik писал(а):
Darti писал(а): В данный момент понадобилось изменить на
RW - GND
это как?
Придумано не мной, на отладочной доске EasyAVR6 сделано именно так, с ихними примерами все шикарно работает. Мне же хотелось бы запустить с codevision.

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

Добавлено: Ср май 22, 2013 10:26:55
a_skr
а в чем проблема? соедините RW с корпусом. у Вас нет свободного пина, на который повесить RD в конфигураторе CodeVision?

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

Добавлено: Ср май 22, 2013 10:30:50
Darti
a_skr писал(а):а в чем проблема? соедините RW с корпусом. у Вас нет свободного пина, на который повесить RD в конфигураторе CodeVision?
Обратите внимание что ножки смещены в отличие от стандартной конфигурации
RS - PD2
E - PD3
в CAVR1.25 можно выбрать только порт к которому будет подключен экран, выбрать пины нельзя, но наверно их можно изменить в либе, собственно и вопрос возможно ли их поменять или нет?

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

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

Добавлено: Ср май 22, 2013 11:09:50
a_skr
Darti писал(а):UPDATE: как менять пины нашел в lcd.lib все меняется, осталось только понять как посадить ножку RW на землю.
паяльником ;)
я почему спросил, Вам надо освободить ножку, чтобы библиотека ее не использовала, потому что свободных нет? если свободные есть и Вы нашли, как их поменять в либе, то поставьте любую свободную. пусть в воздухе висит.

PS. хотя, может не получится, если библиотека опрашивает готовность дисплея.

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

Добавлено: Ср май 22, 2013 11:13:41
Darti
a_skr писал(а):
Darti писал(а):UPDATE: как менять пины нашел в lcd.lib все меняется, осталось только понять как посадить ножку RW на землю.
паяльником ;)
я почему спросил, Вам надо освободить ножку, чтобы библиотека ее не использовала, потому что свободных нет? если свободные есть и Вы нашли, как их поменять в либе, то поставьте любую свободную. пусть в воздухе висит.
Свободных нет, нужно чтобы либа ее не использовала. Со свободными разобрался, но этот вариант не устраивает. Если просто повесить в воздух, то не работает, так же как если посадить на землю. Нужно именно что то поправить в либе, чтобы экран работал только на чтение
Кстати, ваше последнее предположение похоже на правду, шпротеус выдает "controller received command whilst busy"

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

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

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

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

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

Добавлено: Ср май 22, 2013 11:25:29
ibiza11
Изменено.
идите в соседнюю ветку, там этих библиотек - ешь нехочу.