Witam, mecze sie z tym problemem juz od dwoch dni i nie moge znalezc rozwiazania... mam polaczone USB z atmega w ten sposob:
Terminal ustawiony tak:
I nic sie nie wyswietla po nacisnieciu polacz... kod ktorego uzywam to jakis zaczerpniety z forum avrfreaks, z tego co tam napisali powinien dzialac...
Pozmienialem nazwy rejestrow i bitow tak zeby pasowalo do dokumentacji atmega128, ale nie jestem co do konca pewien czy to tak ma byc... Na makiecie mam sygnal ze dane "ida" do procka (mryga dioda LED9) i tyle :/. Z gory dziekuje za pomoc!
Terminal ustawiony tak:
I nic sie nie wyswietla po nacisnieciu polacz... kod ktorego uzywam to jakis zaczerpniety z forum avrfreaks, z tego co tam napisali powinien dzialac...
#include <stdio.h>
#include <avr/io.h>
#define FOSC 16000000
#define BAUD 9600
#define MYUBRR (FOSC/16/(BAUD)-1)
#define sbi(var, mask) ((var) |= (uint8_t)(1 << mask))
#define cbi(var, mask) ((var) &= (uint8_t)~(1 << mask))
#define STATUS_LED 0
//Define functions
//======================
void ioinit(void); // initializes IO
static int uart_putchar(char c, FILE *stream);
uint8_t uart_getchar(void);
static FILE mystdout = FDEV_SETUP_STREAM(uart_putchar, NULL, _FDEV_SETUP_WRITE);
void delay_ms(uint16_t x); // general purpose delay
//======================
int main (void)
{
uint8_t key_press;
ioinit(); //Setup IO pins and defaults
printf("Waiting for input:\n");
while(1)
{
key_press = uart_getchar();
printf("I heard : %c\n", key_press);
}
return(0);
}
void ioinit (void)
{
//1 = output, 0 = input
// 76543210
DDRA = 0b11101111;
DDRB = 0b11101111; //PB4 = MISO
DDRC = 0b11111111; //
DDRD = 0b11111011; //PD2 = RX1
DDRE = 0b11101110; //PE0 = RX0
DDRF = 0b11101111;
//USART Baud rate: 9600
UBRR1H = MYUBRR >> 8;
UBRR1L = MYUBRR;
UCSR1B = (1<<RXEN1)|(1<<TXEN1)|(1<<UDRIE1);
UCSR1C |= (3<<UCSZ1);
stdout = &mystdout; //Required for printf init
}
static int uart_putchar(char c, FILE *stream)
{
if (c == '\n') uart_putchar('\r', stream);
loop_until_bit_is_set(UCSR1A, UDRE1);
UDR1 = c;
return 0;
}
uint8_t uart_getchar(void)
{
while( !(UCSR1A & (1<<RXC1)) );
return(UDR1);
}
//General short delays
void delay_ms(uint16_t x)
{
uint8_t y, z;
for ( ; x > 0 ; x--){
for ( y = 0 ; y < 80 ; y++){
for ( z = 0 ; z < 40 ; z++){
asm volatile ("nop");
}
}
}
}
Pozmienialem nazwy rejestrow i bitow tak zeby pasowalo do dokumentacji atmega128, ale nie jestem co do konca pewien czy to tak ma byc... Na makiecie mam sygnal ze dane "ida" do procka (mryga dioda LED9) i tyle :/. Z gory dziekuje za pomoc!