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


von Thorsten G. (stubi2)


Angehängte Dateien:

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.

von Johannes M. (johnny-m)


Lesenswert?

Oh, rar, wie schön. Wünsche viel Spaß allein...

von H.Joachim S. (crazyhorse)


Lesenswert?

ich will auch nicht.

von Gast (Gast)


Lesenswert?

stell es mal als .zip ein, oder besser als
1
 C-Code

von Thorsten G. (stubi2)


Angehängte Dateien:

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.

von Johannes M. (johnny-m)


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!

von Oliver (Gast)


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

von Gast (Gast)


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
}

von Thorsten G. (stubi2)


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?

von 1234 (Gast)


Lesenswert?

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

von Gast (Gast)


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.

von Gast (Gast)


Lesenswert?

> UCSRC = (1<<URSEL)|(3<<UCSZ0);

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

von Johannes M. (johnny-m)


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.

von Gast (Gast)


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.

von Johannes M. (johnny-m)


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"...

von Thorsten G. (stubi2)


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.

von Johannes M. (johnny-m)


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.

von Gast (Gast)


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?

von Thorsten G. (stubi2)


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.

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.