Atmega32PAPU Übertragungsprobleme

Gast #4468219
Hallo,

ich weiss nicht mehr weiter: Ich habe eine Atmega32PAPU mit zwei 
seriellen Ports und habe mich an die Codebeispiele aus dem Datenblatt 
gehalten, bekomme aber immer nur 80 00 im Terminalprogramm ausgeworfen. 
Wenn ich "11" schicke dann erhalte 80 80 00.

Hat jemand eine Idee, was ich falsch mache ?

#ifndef F_CPU
#define F_CPU 8000000UL
#endif

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

void USART_Init( unsigned int baud )
{
  // Set baud rate
  UBRR0H = (unsigned char)(baud>>8);
  UBRR0L = (unsigned char)baud;
  // Enable receiver and transmitter
  UCSR0B = (1<<RXEN0)|(1<<TXEN0);
  // Set frame format: 8data, 2stop bit
  UCSR0C = (1<<USBS0)|(1<<UCSZ00);
}

void usart_putint(int zahl)
{
  while(!(UCSR0A & (1<<UDRE0)));//warten auf Datenregister empty

  UDR0=zahl;
}


void main()
{
USART_Init(51); // 51 = 9600

  while (1)
  {
    usart_putint(44);
  }
}
Gast #4468234
Du stellst hier nur 6 Bit Datenbreite ein. Soll das so?

UCSR0C = (1<<USBS0)|(1<<UCSZ00);

Für 8 Bit müsste es zu

UCSR0C = (1<<USBS0)|(1<<UCSZ10)|(1<<UCSZ00);

werden.
#4468237
Mit welcher Taktfrequenz läuft dein ATMega wirklich? Lass doch mal 
eine LED im Sekundentakt blinken.

Und noch ein Tipp: Dein putint(44) gibt mitnichten eine Zahl mit 
Vorzeichen aus (ein "int") sonder ein einzelnes Byte. In deinem Fall ist 
es 44dez=0x2c=","
Gast #4468384
Der Tip mit den LEDs war schonmal ein Volltreffer. Ich Trottel hab 
schlichtweg vergessen, den externen Oszillator einzustellen.
Jetzt blinken die LEDs auch im Sekundentakt.

Gelöst ist das Problem aber noch nicht. Wenn ich eine 1 Sende, kommt 192 
an.

Ich habe das eben mit dem Code auf einer Atmega32 getetstet, mit 
angepassten Registern natürlich und da funktionierts. Der Terminal gibt 
mir genau das aus, was ich schicke...

Wie bekomm ich denn jetzt ohne grosse Rummrechnerei die INT Werte 
übertragen ?
Gast #4468462
Hallo Tom,

tom schrieb:
> ich weiss nicht mehr weiter: Ich habe eine Atmega32PAPU mit zwei
> seriellen Ports und habe mich an die Codebeispiele aus dem Datenblatt
> gehalten, bekomme aber immer nur 80 00 im Terminalprogramm ausgeworfen.
> Wenn ich "11" schicke dann erhalte 80 80 00.

Einen Atmega32PA-PU finde ich bei Atmel nicht.

Die neueren Atmega32A haben nur eine "A" angehängt.
http://www.atmel.com/devices/ATMEGA32A.aspx
Aber die haben alle nur ein Uart !
Gast #4468463
Hallo Tom,

tom schrieb:
> ich weiss nicht mehr weiter: Ich habe eine Atmega32PAPU mit zwei
> seriellen Ports und habe mich an die Codebeispiele aus dem Datenblatt
> gehalten, bekomme aber immer nur 80 00 im Terminalprogramm ausgeworfen.
> Wenn ich "11" schicke dann erhalte 80 80 00.

Einen Atmega32PA-PU finde ich bei Atmel nicht.

Die neueren Atmega32A haben nur ein "A" angehängt.
http://www.atmel.com/devices/ATMEGA32A.aspx
Aber die haben alle nur ein Uart !

Antwort schreiben

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