ATMEGA32, 16PU, RS232, Testprogramm

OP #1213233
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.
Angehängte Dateien:
#1213246
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!
Gast #1213270
Lesenswert?

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
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.
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
Lesenswert?

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 #1213591
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.
#1213607
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"...
OP #1213622
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.
#1213649
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.
OP #1213872
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren