Problém s ATmega162 a UART

C,C++,C#

Moderátori: psichac, Moderátori

Používateľov profilový obrázok
jirka.jirka.
Ultimate člen
Ultimate člen
Príspevky: 1538
Dátum registrácie: 17 Okt 2008, 00:00
Bydlisko: Uherské Hradiště
Kontaktovať používateľa:

Problém s ATmega162 a UART

Príspevok od používateľa jirka.jirka. » 02 Máj 2013, 20:34

Ahoj.
Hraju si s ATmegou162 a chtěl bych z ní posílat data a v PC je zpracovávat. Ale nějak mi data nepřicházejí. Krystal 16MHz. Připojení je takovéto:

RS - ATmega162
RXD - TXD (PD1)
TXD - RXD (PD0)

Kód: Vybrať všetko

#define      BAUD_RATE 9600
#define      BAUD_PRESCALE (((F_CPU / (BAUD_RATE * 16UL))) - 1) 
Inicializaci,... mám zde

Kód: Vybrať všetko

void UART_Transmit(unsigned char data)
{
   while ( !( UCSR0A & (1<<UDRE0)) );
   UDR0 = data;
} 

void Setup()
{
   UBRR0L = BAUD_PRESCALE;
   UBRR0H = (BAUD_PRESCALE >> 8);
   UCSR0C = (3 << UCSZ00);
   UCSR0B |= (1 << TXEN0);
}

void uart_putstring(const char *progmem_s )
{
   register char c;
   while ( (c = pgm_read_byte(progmem_s++)) )
   {
      UART_Transmit(c);
   }
   UART_Transmit(0x0d);
   UART_Transmit(0x0a);
}
V mainu jednou zavolám funkci Setup();

a v nekonečné smyčcese snažím o poslání písmena H

Kód: Vybrať všetko

uart_putstring(PSTR("H"));
Neporadí někdo?
0

Používateľov profilový obrázok
jirka.jirka.
Ultimate člen
Ultimate člen
Príspevky: 1538
Dátum registrácie: 17 Okt 2008, 00:00
Bydlisko: Uherské Hradiště
Kontaktovať používateľa:

Re: Problém s ATmega162 a UART

Príspevok od používateľa jirka.jirka. » 02 Máj 2013, 21:31

Tak ještě jedna změna. ten prográmek jsem změnil. Nyní se to snažím rozjet pomocí těchto knihoven. Ale přijímám pouze tyto znaky: €
Stále za sebou.

Program začínám:

Kód: Vybrať všetko

#define UART_BAUD_RATE      9600 

Kód: Vybrať všetko

#define F_CPU 16000000UL
v mainu inicializuji a povoluji přerušení

Kód: Vybrať všetko

uart_init( UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) ); 
		sei();
A v nekonečné smyčce se snažím odeslat písmeno A

Kód: Vybrať všetko

uart_puts("a");
Prílohy
uart.c
(21.05 KiB) 33 stiahnutí
uart.h
(7.3 KiB) 31 stiahnutí
0

Používateľov profilový obrázok
jirka.jirka.
Ultimate člen
Ultimate člen
Príspevky: 1538
Dátum registrácie: 17 Okt 2008, 00:00
Bydlisko: Uherské Hradiště
Kontaktovať používateľa:

Re: Problém s ATmega162 a UART

Príspevok od používateľa jirka.jirka. » 02 Máj 2013, 22:44

Tak jsem napsal ještě jeden příklad komunikace, ale problém asi nebude v programu.

Kód: Vybrať všetko


#include <avr/io.h> 
#include <stdio.h>
#include <stdlib.h> 
#include <util/delay.h> 
#include <avr/interrupt.h>
#include <math.h>

#include "lcd.h"

void send_uart0(uint8_t x)
{
   while(!(UCSR0A&0x20)); // Wait until  UDR0 is empty
   UDR0=x;
}

int main(){ 

    unsigned int U;
    lcd_init(LCD_DISP_ON); 

    //Init UART
   UBRR0H=0;
      UBRR0L=103; //9600 Bauds for XTAL = 16MHz
      UCSR0B=(1<<TXEN0)|(1<<RXEN0)|(1<<RXCIE0);
   sei();

for(;;){

   send_uart0('H');
        _delay_ms(100);
   
   }return 0; 
} 
Jestli nemám náhodou špatně nastavené fuse. Ale to si nemyslím. Jedu na externí krystal 16MHz. A pojistky mám takto. Co myslíte, mám je blbě? Dík
0

Používateľov profilový obrázok
jirka.jirka.
Ultimate člen
Ultimate člen
Príspevky: 1538
Dátum registrácie: 17 Okt 2008, 00:00
Bydlisko: Uherské Hradiště
Kontaktovať používateľa:

Re: Problém s ATmega162 a UART

Príspevok od používateľa jirka.jirka. » 02 Máj 2013, 23:14

Takže jsem měl nastavenou děličku 8. Takže jsem nejel na 16MHz ale na 8. :-D
0

Používateľov profilový obrázok
jirka.jirka.
Ultimate člen
Ultimate člen
Príspevky: 1538
Dátum registrácie: 17 Okt 2008, 00:00
Bydlisko: Uherské Hradiště
Kontaktovať používateľa:

Re: Problém s ATmega162 a UART

Príspevok od používateľa jirka.jirka. » 02 Máj 2013, 23:36

No když jsem se tu tak rozpovídal, teď otázka pro ostatní.

Nevíte o nějakém programu, který by zachytával komunikaci po RS232 a ukládal do třeba excelu? Budu posílat čísla.
0

Napísať odpoveď
  • Podobné témy
    Odpovedí
    Zobrazení
    Posledný príspevok