mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATMEGA32, 16PU, RS232, Testprogramm


Autor: Thorsten Grube (stubi2)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Nun da mein alter Beitrag eine falsche Überschrift hatte, versuche ich 
das hier erneut. Ich habe ein kleines Testprogramm geschrieben. 
Sicherlich sind da noch einige Fehler drin. Vielleicht kann da mal einer 
drüberschauen. Ich lass eine LED blinken und ein Zeichen über RS232 
senden. Das mit dem blinken der LED klappt. Der rest noch nicht.

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oh, rar, wie schön. Wünsche viel Spaß allein...

Autor: H.Joachim Seifert (crazyhorse)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich will auch nicht.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
stell es mal als .zip ein, oder besser als
 C-Code

Autor: Thorsten Grube (stubi2)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Mögt ihr denn eine ZIP Datei?
Oder gibt es noch andere Vorschläge. Schön währe es wenn statt meckern 
auch Hilfe kommt.

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thorsten Grube wrote:
> Mögt ihr denn eine ZIP Datei?
Ist zwar besser, aber ein kleines Testprogramm muss man überhaupt 
nicht als Archiv schicken!

> Oder gibt es noch andere Vorschläge. Schön währe es wenn statt meckern
> auch Hilfe kommt.
Ach, so ist das! Dann mach Deinen Dreck allein!

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sind ja immerhin zwei Dateien im Archiv.
UBRRH = (unsigned char)(UART_BAUD_RATE>>8);
UBRRL = (unsigned char)UART_BAUD_RATE;

Das wäre schön, wenn die Berechnung der Registerwerte so einfach wäre. 
Ist sie aber nicht. Schau ins Datenblatt, und dann in die Doku der 
avr-libc. Da gibt es <util/setbaud.h>, der nimmt dir viel Arbeit ab.

Oliver

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hey Jungs, seit doch nicht so garstig....
Er hat doch geschrieben, dass er noch neu ist und nicht weiß wie er sich 
konform verhält.

Hier mal ein Beispiel für eine UART-Initialisierung (ist zwar für einen 
ATmega162, sollte aber mit Registernamensänderung auch auf einem ATm32 
laufen). Quarzfrequenz sollte auch auf deine Quarzfrequenz eingetragen 
werden.

#define F_CPU 14745460  // Quarz 14.74546 MHz

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

void uart0_init(int BaudRate)
{
  int ubrr0 = (F_CPU / 16 / BaudRate - 1);          // Baudrate UART0 einstellen  
  UBRR0H = (unsigned char)(ubrr0>>8);
  UBRR0L = (unsigned char)ubrr0;
         
  UCSR0C = (1<<URSEL0)|(3<<UCSZ00);              // UART0 Frame Format einstellen: 8data, 1 Stop-bit, keine Parity 
  UCSR0B = (1<<RXEN0)|(1<<TXEN0)|(1 << RXCIE0);        // UART0 Receiver und Transmitter einschalten
}


int main()    // Hauptprogramm

{
                                
                  uart0_init(9600);  // USART0 initialisieren (Baudrate auf 9600 )
  

  //DEIN PROGRAMM


  return 0;
}

Autor: Thorsten Grube (stubi2)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Tipps.

so sieht das Programm jetzt aus, nachdem ich es für ATMEGA32 abgeändert 
habe.
#define F_CPU 8000000
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <string.h>
#include <stdbool.h>

unsigned char leds = 0x04;

void uart0_init(int BaudRate)
{
  int ubrr0 = (F_CPU / 16 / BaudRate - 1);          // Baudrate UART0 einstellen  
  UBRRH = (unsigned char)(ubrr0>>8);
  UBRRL = (unsigned char)ubrr0;
         
  UCSRC = (1<<URSEL)|(3<<UCSZ0);              // UART0 Frame Format einstellen: 8data, 1 Stop-bit, keine Parity 
  UCSRB = (1<<RXEN)|(1<<TXEN)|(1 << RXCIE);        // UART0 Receiver und Transmitter einschalten
}


void USART_Transmit( unsigned char data )
{
  /* Wait for empty transmit buffer */
  while ( !( UCSRA & (1<<UDRE)) );
  {
    /* Put data into buffer, sends the data */
    UDR = data;
  }
}

int main(void)    // Hauptprogramm

{
                                
                  uart0_init(9600);  // USART0 initialisieren (Baudrate auf 9600 )
  

  //DEIN PROGRAMM
  while (1) 
   {
    USART_Transmit( 'H');
    /*LED an */
    _delay_ms(500);
    leds = 0x04;
    DDRD = DDRD | 0x1c;
    PORTD = (PORTD & 0xe3) | leds;
    _delay_ms(500);
    leds = 0x00;
    DDRD = DDRD | 0x1c;
    PORTD = (PORTD & 0xe3) | leds;
   }


  return 0;
}

Was kann man da noch verbessern?

Autor: 1234 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es gibt doch nahezu unendliche viele Variationen von Seiten, die das 
UART initailisieren und ein paar Bytes rein-/raushauen. Weshalb nochmals 
eine neue ?

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du kannst ggf. den Quarz noch gegen einen geeigneteren austauschen. Es 
gibt sog. Baudratenquarze. Der 8MHz gehört nicht dazu.
http://www.mikrocontroller.net/articles/Baudratenquarz
bzw.
http://www.wormfood.net/avrbaudcalc.php
Ansonsten ausprobieren.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> UCSRC = (1<<URSEL)|(3<<UCSZ0);

hast du im Datenblatt nachgeschaut ob es bei dem ATm32 ein "UCSZ0" 
-Register gibt?

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gast wrote:
>> UCSRC = (1<<URSEL)|(3<<UCSZ0);
>
> hast du im Datenblatt nachgeschaut ob es bei dem ATm32 ein "UCSZ0"
> -Register gibt?
Das sind Bits und kein Register! Und ja, beim ATMega32 gibt es die.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Johannes M. (johnny-m) wrote:
> Oh, rar, wie schön. Wünsche viel Spaß allein...
> Ach, so ist das! Dann mach Deinen Dreck allein!
> Das sind Bits und kein Register! Und ja, beim ATMega32 gibt es die.

Welche Laus ist dir denn heute über die Leber gelaufen??
Wenn du was zu sagen hast und auf einen Fehler aufmerksam machen willst 
gewöhn dir einen anderen Ton an oder halt die Schnauze.

Und ja, sorry, da habe ich mich vertan mit Bits und Register.

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gast wrote:
> Wenn du was zu sagen hast und auf einen Fehler aufmerksam machen willst
> gewöhn dir einen anderen Ton an oder halt die Schnauze.
Hast Du noch alle? Derjenige, der um Hilfe bittet, soll sich erst mal 
einen anderen Ton angewöhnen! Und von einem anonymen Gast lasse ich mich 
sicher nicht so anpflaumen!

Thorsten Grube wrote:
>> Schön währe es wenn statt meckern auch Hilfe kommt.
Ich hatte nämlich oben gar nicht "gemeckert"...

Autor: Thorsten Grube (stubi2)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das sehe ich ja ein. Das Wort "meckern" war keine gute Wahl. Aber nur 
schreiben was einen nicht gefällt, hilft einen Anfänger auch nicht 
weiter. Aber wie schon sagst, der Ton macht die Musik. Und der sollte 
wieder zurück auf die Sachliche Ebene gebracht werden. Alles andere 
Hilft mir nämlich nicht weiter.

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thorsten Grube wrote:
> Das sehe ich ja ein. Das Wort "meckern" war keine gute Wahl. Aber nur
> schreiben was einen nicht gefällt, hilft einen Anfänger auch nicht
> weiter.
Nun, es gab zu dem Zeitpunkt nichts Positives. Es sollte eine 
Aufforderung sein, das Format des Anhangs zu überdenken. Und wie gesagt: 
Für ein solches Testprogramm braucht es erst mal nur den Code, weshalb 
ein Archiv überflüssig ist. Viele denken überhaupt nicht nach, was sie 
da senden und setzen stillschweigend voraus, dass wohl alle ein Programm 
auf dem Rechner haben, mit dem sie das öffnen können...

> Aber wie schon sagst, der Ton macht die Musik. Und der sollte
> wieder zurück auf die Sachliche Ebene gebracht werden.
Gute Idee.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, find ich auch.

@Thorsten

hast du das Programm oben denn jetzt mal getestet und funktioniert es 
oder welche Problem treten immer noch auf?

Autor: Thorsten Grube (stubi2)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So nun klappt das endlich.

Nun werde ich mich auch tiefer in die PRogrammierung von dem Prozessor 
einarbeiten. Für mich war es erst einmal wichtig die einfachen und 
wesendlichen Dinge zum laufen zu bekommen. Nun kann man sich langsam 
vorwärts arbeiten.

Danke noch einmal an alle Beteiligten.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.