C AVR Daten über RS232

flecralf

Mitglied
25. Juli 2013
194
2
18
Sprachen
  1. ANSI C
Hallo alle zusammen,
habe gerade ein Programm zur Datenübertragung auf die serielle Schnittstelle geschrieben. Die Wert werden auf ein Terminalprogramm wie Putty angezeigt.
Das Problem ist ,dass nur 00 angezeigt werden. Gestern lief es noch wie es sollte, jetzt habe ich es verschlimmbessert und den alten Code mit einem noch älteren
überschrieben. :banghead:
Hier der Code. Ich habe ihn wieder auf ein Minimum verringert um eine größere Übersicht zu erreichen.
Gruß
Ralf

Code:
#include <avr/io.h>
#define F_CPU 8000000  // nimmt die 8 MHz oder die QuatuFrequenz ?
#include <string.h>
#include <inttypes.h>
#include<util/delay.h>
#define BAUD 9600
#include <util/setbaud.h>
int i;

void USARTInit(void) // Initialisierung der uart
{
// UBRR = (fosc/(16*Baudrate))-1
 //Set Baud rate
#define ubrr_value 51
UBRRL = ubrr_value;
UBRRH = (ubrr_value>>8);
//unsigned int size 8
  
  UCSRC=(1<<URSEL)|(3<<UCSZ0);
//Enable The receiver and transmitter
  UCSRB=(1<<RXEN)|(1<<TXEN);
}


char USARTReadChar(void) //Einlesen eines char, hier zum Beispiel unwichtig
{
   //Wait untill a data is available

   while(!(UCSRA & (1<<RXC)))
   {
   }
   return UDR;
}


//##########################

void USARTWriteChar(char data) //Schreibmakro
{
   while(!(UCSRA & (1<<UDRE)))
   {
   }
   UDR=data;
}
//###################

int main()
{
USARTInit();
   while(1)
   {

for(i=0x30;i <= 0x50;i++) //Ausgabe der Ascii-Wert von 0x03 bis 0x50
{
USARTWriteChar(i);
_delay_ms(500);
}
  
 }
  
  


   }



Einen Peglumsetzer habe ich mit 2 Transistoren gebaut und heute kam eine Schaltung mit dem Max232, beide dasselbe Verhalten.
 
Hallo Ralf,

bisher hat ja leider noch keiner geantwortet. Ich sehe im Moment keinen Fehler. Der Code passt zu kleineren Mikrocontrollern mit URSEL Bit (es wäre trotzdem interessant, welcher Mikrocontroller es genau ist)

Stimmt der Systemtakt vielleicht nicht (zum Beispiel Fusebit CKDIV8 - falls vorhanden - programmiert)?

Es ist allerdings schon ein komischer Effekt, dass hier nur 00 angezeigt wird. Die Ursache kann ich mir im Moment nicht erklären.

Dirk :ciao:
 
Hallo Dirk,
es ist ein Atmega8.
An den Fusebits habe ich nichts verändert, der Chip ist nagelneu.
Kann ich über usbasp(?) und mit avrdude da etwas dran ändern ?
Gruß
Ralf
 
Es liegt wohl an der Clock. Hab jetzt mal auf externen Quarz 8Mhz umgestellt und es funktioniert.
Gruß
Ralf
 
Hallo Ralf,
... es ist ein Atmega8.
An den Fusebits habe ich nichts verändert, der Chip ist nagelneu.

wenn du nichts an den Fuses verstellt hast, dann ist der interne RC-Oszillator als Systemtaktquelle gewählt und dieser läuft mit 1MHz.
Es liegt also am Systemtakt.

Umgestellt auf Quarzoszillator 8MHz funktioniert es ja jetzt.

Dirk :ciao:
 
Moin Dirk,
doch nicht ganz... irgendwie haut es ab und zu Fehler in die Übertragung...
Gut, also bei einem neuen AVR steht der Takt auf 1 Mhz ?
Hab ja mehrere, der AD-Eingang lebt gefährlich.
Dann nehme ich mal einen Neuen.
Gruß
Ralf
 
Hallo Ralf,
Gut, also bei einem neuen AVR steht der Takt auf 1 Mhz ?

ja bei dem ATmega8 ist das so. Für ISP-Programmierung benötigt man einen Systemtakt und es ist immer vom Werk aus der interne RC-Oszillator als Systemtaktquelle eingestellt. Mei manchen Mikrocontrollern läuft dieser zwar mit ca. 8MHz, dann ist aber ein Fusebit CKDIV8 vorhanden und programmiert, was den Takt durch 8 teilt.

Warum das bei dir mit dem USART immer noch nicht zuverlässig funktioniert, weiß ich leider nicht :(

Dirk :ciao:
 
Vieleicht eine zu lange Leitung, oder HF-störungen?

Liegt ein Handy in der Nähe oder läuft die Waschmaschiene etc.?

Ansonsten probier doch noch mal ne gerade Baudrate, so das kein Baudratenfehler auftritt...
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)