Forum: Compiler & IDEs UART gibt seltsame impulse aus


von 5465 (Gast)


Angehängte Dateien:

Lesenswert?

Hallo, bin gerade dabei das erste mal UART zu verwenden. Wie so häufig
bockt das teil aber, oder ich mach was falsch :/

Ich benütze die "updated avr UART Lib" 
http://beaststwo.org/avr-uart/index.shtml . Mein Hauptprogramm sieht so 
aus:
1
#define F_CPU 1000000UL
2
#define xtalCpu 1000000UL
3
#define baudRate 2400
4
#include <avr/interrupt.h>
5
#include <avr/io.h>
6
#include <stdint.h>
7
#include <util/delay.h>
8
9
#include <uart.h> // updated fleury's lib
10
11
int main (void){
12
  DDRD |= 0x02;
13
  MCUCSR = (1<<JTD); //disable JTAG
14
  MCUCSR = (1<<JTD);
15
  uart_init(2400); //UART_BAUD_SELECT(xtalCpu,baudRate)
16
  sei();
17
  for(;;){
18
  uart_putc('A');
19
  _delay_ms(500);  
20
  }          
21
  
22
  return 0;
23
}

Leider kommt kein A am hyperterminal an. Ich hab dann mal ein 
funktionierendes UART in Proteus nachgebaut mit virtuellen Com-ports,ich
kann ohne Probleme in Proteus nach draußen schreiben und umgekehrt. Mit 
"draußen" mein ich von Proteus über den virtuellen Com-port ins Windows 
Hyperterminal.

Dann hab ich noch den Atmega32 mit dem Programm dazugehängt (in proteus) 
und dort die Signal am Oszi verglichen. Auf dem Bild sieht man die 
beiden Signal die gelbe Linie ist ein 'A' von Proteus und die Blaue was 
am TXD Pin vom Atmega rauskommt.

An der oben verlinkten Bibliothek habe ich nichts verändert lediglich 
eingefügt.Es ist dort auch kein Beispiel dabei deshalb vermute ich mal 
das
nach uart_init(baudrate angeben) und sei() für die Interrupts UART 
startklar zum benützen ist?

von ... (Gast)


Lesenswert?

Versuchs mal damit:
1
uart_init(UART_BAUD_SELECT(2400, F_CPU));

von 5465 (Gast)


Lesenswert?

lol, danke hat mir sehr geholfen :)

von Alter F. (alter_falter)


Lesenswert?

Wenngleich schon alt, aber für alle künftigen Leser ein wichtiger 
Hinweis bezüglich der Uart Library auf beatstwo.org:

Es hat sich zumindest ein Bug eingeschlichen in der Lib.
Bei den Defines für den 644P steht:

#define UART0_RECEIVE_INTERRUPT  USART0_RX_vect
#define UART1_RECEIVE_INTERRUPT  USART0_UDRE_vect
#define UART0_TRANSMIT_INTERRUPT  USART1_RX_vect
#define UART1_TRANSMIT_INTERRUPT  USART1_UDRE_vect

es sollte aber heißen:

#define UART0_RECEIVE_INTERRUPT      USART0_RX_vect
#define UART0_TRANSMIT_INTERRUPT     USART0_UDRE_vect
#define UART1_RECEIVE_INTERRUPT      USART1_RX_vect
#define UART1_TRANSMIT_INTERRUPT     USART1_UDRE_vect

Der Autor ist mittlereile bereits verstorben, sodaß die Homepage nicht 
mehr aktualisiert wird.


Dies zu Eurer Info.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.