Forum: Mikrocontroller und Digitale Elektronik Atmega32PAPU Übertragungsprobleme


von tom (Gast)


Lesenswert?

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);
  }
}

von Felix Adam (Gast)


Lesenswert?

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.

von Georg G. (df2au)


Lesenswert?

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=","

von tom (Gast)


Lesenswert?

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 ?

von Felix A. (madifaxle)


Lesenswert?

Wenn du nicht den ATmega32 meintest, was ist dann ein ATmega32PAPU? Den 
finde ich bei Atmel nicht. Nichtmal per Suchmaschine...

von tom (Gast)


Lesenswert?


von Felix A. (madifaxle)


Lesenswert?

Felix Adam schrieb:
> 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.

Das gilt laut Datenblatt auch für ATmega324P.

von S. Landolt (Gast)


Lesenswert?

Ändert aber nichts an den eingestellten 6 bit.

von tom (Gast)


Lesenswert?

Vielen Vielen Dank !

Funktioniert jetzt ! Am Ende doch noch Probleme mit Baudrate, Stopbits 
etc.

Habt mir den Sonntag gerettet !

von Felix A. (madifaxle)


Lesenswert?

In dem Fall würde mich interessieren, warum das so ist (das mit den 6 
Bits.)

: Bearbeitet durch User
von Karl M. (Gast)


Lesenswert?

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 !

von Karl M. (Gast)


Lesenswert?

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 !

von Felix A. (madifaxle)


Lesenswert?

Siehe Beitrag: 14.02.2016 14:42

von Karl M. (Gast)


Lesenswert?

Danke Felix,

passt.

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.