Mega88 - Mal wieder UART

Gast #1509634
Hallo!

Ich hatte auf dem Mega8515 nie Probleme mit dem UART, aber nun gehts 
los:

Auf einem Steckbrett steckt ein Mega88. Als Takt dient ein 
Quarzoszillator mit 12 MHz (Fuses beachtet, mit _delay_ms(1000) passt 
die Geschwindigkeit auch).
Vom PD1 gehts über den Pegelwandler des STK500 zum RS232 Umsetzer des 
PCs. (Port umgesteckt -> SPARE).
An PD1 (TxD) hängt parallel eine LED zur Kontrolle des Pegelwechsels mit 
Vorwiderstand an GND, an PC5 hängt eine LED mit Vorwiderstand an VCC.

Mein Code, WinAVR-Version: 20090313
1
#include <avr/io.h>  
2

3
int main (void) {    
4
   
5
   DDRC = 0xFF ; // All out
6
   #define BAUD 9600
7
   #include <util/setbaud.h>
8
   UBRR0H = UBRRH_VALUE;
9
   UBRR0L = UBRRL_VALUE;
10
   #if USE_2X
11
   UCSR0A |= (1 << U2X0);
12
   #else
13
   UCSR0A &= ~(1 << U2X0);
14
   #endif
15

16
    // Enable transmitter 
17
    UCSR0B = (1<<TXEN0);
18
    // Set frame format: 8data, 1stop bit
19
    UCSR0C =  (1<<UCSZ01)|(1<<UCSZ00);  
20
  
21
  while(1) {
22
  
23
    // Wait for empty transmit buffer
24
    while (!(UCSR0A & (1<<UDRE0))){
25
      
26
      // In diese Schleife wird nur 1x gesprungen
27
      
28
      // Put data into buffer, sends the data
29
      UDR0 = 0x55 ;
30
      
31
      PORTC ^= (1<<PC5) ; // Test LED
32
    } ;
33
  } ;
34
 } ;

Nun scheint es so, als wenn das UDR nur einmal beschrieben wird, 
zumindest wird die Schleife nur einmal durchlaufen (mit AVR-Studio 
getestet). Die LED am TxD-Port PD1 geht dauer an, geht aber nicht wieder 
aus, auch kein Flackern.
Die LED an PC5 bleibt ebenso dauer an, kein Flackern.

Jemand eine Idee die Tomaten auf meinen Augen weg zu pulen?

Gruß
Daniel
Daniel Goßmann schrieb:
>
1
> #include <avr/io.h>
2
> 
3
> int main (void) {
4
> 
5
>    DDRC = 0xFF ; // All out
6
>    #define BAUD 9600
7
>    #include <util/setbaud.h>
8
>
sorry aber was hat hier ein PRÄprozessor zu suchen??
würd ich so machen:
1
#include <avr/io.h>
2
#include <util/setbaud.h>
3
#define BAUD 9600
4

5

6
int main (void) {
7
   DDRC = 0xFF ; // All out
Du musst dir vorstellen wenn der code mal gewartet werden soll (aus 
irgend einem Grund z.B umschreiben auf anderen Prozessor), dann viel 
Spass beim ändern. So hast du alles schön in den ersten paar Zeilen 
deklariert.
Kriegt der Combiler so nicht auch ein Problem??


>
1
>   while(1) {
2
> 
3
>     // Wait for empty transmit buffer
4
>     while (!(UCSR0A & (1<<UDRE0))){
5
> 
6
>       // In diese Schleife wird nur 1x gesprungen
7
> 
8
>       // Put data into buffer, sends the data
9
>       UDR0 = 0x55 ;
10
> 
11
>       PORTC ^= (1<<PC5) ; // Test LED
12
>     } ;
13
>   } ;
14
>  } ;     
15
>
Schöne Semikolons nach den Struckturblöcken, aber diese brachts nicht.
1
while(1){
2
  // mach was
3
}
oh, hab noch was entdeck:
1
> #include <avr/io.h>  
2
> // .....
3
> int main (void) {     
4
>   
5
>   while(1) {
6
>     while (!(UCSR0A & (1<<UDRE0))){
7
>       // ...
8
>     } ;
9
>   } ;
10
>  } ;
11
>
deine main-Funktion kann so nicht funktionieren: sollte zumindest eine 
Fehlermeldung kommen (" wrong function type or missing return")
1
int main(void){
2
// ....
3
   while(1){
4
      //....
5
   }
6
return 0;
7
}

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.