Atmega644 UART empfangen funktioniert nicht

Gast #708202
Hey,
ich programmiere gerade einen Atmega644 in C. über UART senden geht, 
empfangen jedoch nicht. Ich habe das ganze auch mit BASCOM versucht, 
ebenfalls erfolgslos. Als ich dann einen Atmega32 eingesetzt habe (der 
Pingleich ist), gings auf einmal (Hab nur Frequenz und definitionsdatei 
in Bascom geändert).
Woran liegt das und wieso geht das mit dem Atmega644 nicht?
Gruß,
Rasmus
Gast
Das ist der Code
1
$regfile = "m644def.dat"                                    'bzw "m32def.dat"
2
$crystal = 20000000                                         'bzw $crystal = 16000000
3
$baud = 9600
4
Dim A As Byte , S As String * 20
5
On Urxc Getrs
6
Enable Urxc
7
Enable Interrupts
8
Do
9
   Print "hallo"
10
   Waitms 500
11
Loop
12

13

14

15

16

17
Getrs:                                                      '
18
   S = Inkey()
19
   If Len(s) > 0 Then
20
      Print S
21
   End If
22
Return
23

24
End
Ich baue jeweils den Quarz um (von 16 Mhz auf 20 Mhz). Er sendet auch 
alle 0,5Sekunden Hallo.
Gruß,
Rasmus
Gast
Die normale Vorgehensweise ist zuerst ein Zeichen zu senden und mit dem 
Scope zu kontollieren. Dann kann man sich ans Empfangen machen. Wobei 
natuerlich das vom PC geschickte Zeichen auch auf dem Scope kontrolliert 
werden muss.
Gast
Hmm, hab mal einen Quarz der Baudratengerecht ist eingesetzt - ohne 
Erfolg.
Das merkwürdige ist ja das es mit der gleicehn Schaltung mit dem 
Atmega32 funzt. Es muss also was grundsätzliches sein was bei dem 
(neueren) Atmega644 anders ist. Hat einer eine Idee?
Gruß,
Rasmus
Gast
Anbei die funktionierende Initialisierung des Atmega644 UART, direkt aus 
meinem Projekt. Ist eigentlich nichts spezielles zu beachten.
Gruß
Roland

// Version fuer ATmega644

#define baudrate 38400UL

void uart0_init(void)
{
  #if F_CPU <= 1000000UL
   // Slow system clock, double Baud rate to improve rate error.
   UCSR0A = (1<<U2X0);
   UBRR0H = (uint8_t) ((F_CPU / (8 * baudrate)) - 1)>>8;
   UBRR0L = (uint8_t) (F_CPU / (8 * baudrate)) - 1;
  #else
   UBRR0H=(uint8_t)((F_CPU / (16 * baudrate)) - 1)>>8;
   UBRR0L=(uint8_t)(F_CPU / (16 * baudrate)) - 1;
  #endif

  UCSR0C = (1<<UCSZ01) | (1<<UCSZ00);    // Asynchron 8N1
  UCSR0B = (1<<TXEN0) | (1<<RXEN0);      // tx & rx enable
}

void uart0_putchar( char c )
{
  loop_until_bit_is_set( UCSR0A, UDRE0 );
  UDR0 = c;
}

char uart0_getchar( void )
{
  loop_until_bit_is_set( UCSR0A, RXC0 );
  return( UDR0 );
}
Gast
Ja, die Fuses sind alle gesetzt, der Controller läuft ja auch und 
sendet.
Das gepostet Codebeispiel werde ich nacher mal ausprobieren.
Gruß,
Rasmus
Gast
So, habs probiert - ohne Erfolg. Das ist echt komisch..
Wodran kann es denn liegen wenn es mit der gleichen Schaltung mit dem 
Atmega32 funktioniert??
Gruß,
Rasmus
Gast
Hast du den relevanten Pin schon überprüft (als ganz normalen IO 
geschaltet)?

Stell doch mal Deine Hex-Files (32 und 644) zur Verfügung, vieleicht 
stimmt damit etwas nicht.

Vieleicht schwingt das Quarz in Deiner Schaltung nicht richtig. Sind die 
relevanten Fuses bei beiden CPUs korrekt eingestellt, Stichwort 
"rail-to-rail swing"?

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 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.