Уведомления
Очистить все

Проблема с AVR-studio

4 Посты
3 Пользователи
0 Likes
5,145 Просмотры
Ibaness
(@ibaness)
Active Member
Присоединился: 15 лет назад
Сообщения: 5
Topic starter  

Товарищи, помогите! Пытаюсь сварганить аппаратуру радиоуправления на атмеге. 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);
}


Цитата
Radioded
(@sergey)
Estimable Member Admin
Присоединился: 5 лет назад
Сообщения: 184
 

Скорее всего у вашей атмеги(кстати, какая атмега?) несколько 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;
}


ОтветитьЦитата
Ibaness
(@ibaness)
Active Member
Присоединился: 15 лет назад
Сообщения: 5
Topic starter  

AtMega8. Спасибо, глянул в даташит, разобрался, заработало.
Теперь другая проблема. Как подключить к той же атмеге матричную клавиатуру 4x4? Пытался разобраться по самоучителям, но никак не могу вкурить суть, как писать программу на Си.... Кто добрый, помогите...


ОтветитьЦитата
новый
(@oi)
New Member
Присоединился: 15 лет назад
Сообщения: 3
 

Всё просто: 4 ножки выходы, а остальные четыре - входы. Проводники располагаются перекрестно - классика, т.е. 4*4 = 16 кнопок можно опрашивать.
По очереди выставляешь логическую единицу на одной из четырех выходных ножек, а на приёмных смотришь где появилась единица. Аналогично с остальными ножками. Главное правильно организовать цикл опроса и не забыть повесить резисторы/подключить подтягивающие резисторы.


ОтветитьЦитата