ATMEGA32, 16PU, RS232, Testprogramm

OP #1213233
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.
Angehängte Dateien:
#1213246
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!
Gast #1213270
Sind ja immerhin zwei Dateien im Archiv.
1
UBRRH = (unsigned char)(UART_BAUD_RATE>>8);
2
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
Gast #1213295
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.
1
#define F_CPU 14745460  // Quarz 14.74546 MHz
2

3
#include <avr/io.h>
4
#include <avr/interrupt.h>
5
#include <util/delay.h>
6
#include <string.h>
7
#include <stdbool.h>
8

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

19

20
int main()    // Hauptprogramm
21

22
{
23
                                
24
                  uart0_init(9600);  // USART0 initialisieren (Baudrate auf 9600 )
25
  
26

27
  //DEIN PROGRAMM
28

29

30
  return 0;
31
}
OP #1213470
Danke für die Tipps.

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

8
unsigned char leds = 0x04;
9

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

20

21
void USART_Transmit( unsigned char data )
22
{
23
  /* Wait for empty transmit buffer */
24
  while ( !( UCSRA & (1<<UDRE)) );
25
  {
26
    /* Put data into buffer, sends the data */
27
    UDR = data;
28
  }
29
}
30

31
int main(void)    // Hauptprogramm
32

33
{
34
                                
35
                  uart0_init(9600);  // USART0 initialisieren (Baudrate auf 9600 )
36
  
37

38
  //DEIN PROGRAMM
39
  while (1) 
40
   {
41
    USART_Transmit( 'H');
42
    /*LED an */
43
    _delay_ms(500);
44
    leds = 0x04;
45
    DDRD = DDRD | 0x1c;
46
    PORTD = (PORTD & 0xe3) | leds;
47
    _delay_ms(500);
48
    leds = 0x00;
49
    DDRD = DDRD | 0x1c;
50
    PORTD = (PORTD & 0xe3) | leds;
51
   }
52

53

54
  return 0;
55
}

Was kann man da noch verbessern?
Gast #1213492
Es gibt doch nahezu unendliche viele Variationen von Seiten, die das 
UART initailisieren und ein paar Bytes rein-/raushauen. Weshalb nochmals 
eine neue ?
Gast #1213591
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.
#1213607
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"...
OP #1213622
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.
#1213649
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.
OP #1213872
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

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