Товарищи, помогите! Пытаюсь сварганить аппаратуру радиоуправления на атмеге. AVR-studio активно не хочет воспринимать функции UBRR и UCR... Выдает ошибку.... Файлик stdio.h подключил. Что делать? Может еще какой файлик подключить надо? Или это как-то по-модному нужно описывать?
Цитата:
#include <avr/io.h>
#include <util/delay.h>
#include <stdio.h>
char ruli;
char scorost;
char vihod;
char b0;
char b1;
char b2;
char b3;
char b4;
int main (void)
{
DDRB = 0x00;
DDRC = 0xFF;
DDRD = 0xFF;
PORTB = 0xFF;
UBRR = 25;
UCR = 0x18;
b0 = PINB0;
b1 = PINB1;
b2 = PINB2;
b3 = PINB3;
b4 = PINB4;
if (b0 = 0) ruli = 30;
else if (b1 = 0) ruli = 10;
else ruli = 20;
if (b2 = 0) scorost ++;
if (scorost > 7) scorost = 7;
if (b3 = 0) scorost = 3;
if (b4 = 0) scorost --;
if (scorost < 1) scorost = 1;
vihod = ruli + scorost;
putchar (vihod);
_delay_loop_2(10);
}
Скорее всего у вашей атмеги(кстати, какая атмега?) несколько usart`ов, поэтому надо писать регистры с номерами. Гляньте в даташитах примеры.
Например, функции для работы с USART на ATmega64 я писал так:
void usart_init(void){
#if USART_SPEED == 115200
UBRR0H = 0;
UBRR0L = 3; // 115.2 kbit, 7.3728 MHZ
#elif USART_SPEED == 57600
UBRR0H = 0;
UBRR0L = 7; // 57.6 kbit, 7.3728 MHZ
#else
#error "USART SPEED is not defined"
#endif
UCSR0B = (1<<RXCIE0)|(0<<TXCIE0)|(1<<RXEN0)|(1<<TXEN0); // int disable, TX & RX ENABLE
UCSR0C = (1<<UCSZ01)|(1<<UCSZ00); // 8bit, parity none, 1stop bit
}
unsigned char usart_receive(void){
while(!(UCSR0A & (1<<RXC0))){ // RXC0 = 1 if unread data
}
return UDR0;
}
void usart_transmit(unsigned char data){
while(!(UCSR0A & (1<<UDRE0))){ // UDRE0 = 1 if ready for transmit
};
UDR0 = data;
}
AtMega8. Спасибо, глянул в даташит, разобрался, заработало.
Теперь другая проблема. Как подключить к той же атмеге матричную клавиатуру 4x4? Пытался разобраться по самоучителям, но никак не могу вкурить суть, как писать программу на Си.... Кто добрый, помогите...
Всё просто: 4 ножки выходы, а остальные четыре - входы. Проводники располагаются перекрестно - классика, т.е. 4*4 = 16 кнопок можно опрашивать.
По очереди выставляешь логическую единицу на одной из четырех выходных ножек, а на приёмных смотришь где появилась единица. Аналогично с остальными ножками. Главное правильно организовать цикл опроса и не забыть повесить резисторы/подключить подтягивающие резисторы.