Forum: Mikrocontroller und Digitale Elektronik Senden mit ATMEGA238P-PU


von Andre W. (and12121)


Lesenswert?

Hallo,

ich bin bezüglich der Arbeit mit einem Mikrocontroller ein Frischling, 
möchte mich nun aber so langsam einarbeiten. Jetzt möchte ich die 
Kommunikation zwischen Mikrocontroller und PC hinbekommen.

Ich arbeite mit dem Arduino UNO Board (Mikrocontroller ATMEGA328P-PU). 
Zum Empfangen am PC nutze ich das HTerm Terminal.

Ich habe mich eigentlich auch streng an das Tutorial gehalten aber 
irgendwie will es nicht so klappen wie ich will.

Folgenden Quellcode habe ich mir überlegt.


1
#define F_CPU 12000000ul
2
#define _BAUD 9600ul //9600?
3
#define UBRR (F_CPU/(_BAUD*16))-1
4
#define UCSZ1 2
5
#define UCSZ0 1
6
#define UDRE 5
7
8
9
#include <avr/io.h>
10
#include <util/delay.h>
11
#include <inttypes.h>
12
13
void configSYS();
14
15
int main(void)
16
{
17
18
  configSYS();
19
20
  while(1){
21
    
22
       while (!(UCSR0A & (1<<UDRE)))  /* warten bis Senden moeglich                   */
23
       {
24
       }
25
       
26
       UDR0 = 'x';                    /* schreibt das Zeichen x auf die Schnittstelle */
27
  
28
      _delay_ms(1000);
29
  }
30
  
31
}
32
33
void configSYS(){
34
  UBRR0H = UBRR >> 8;          // UBRRH Register setzen
35
  UBRR0L = UBRR & 0xFF;        // UBRRL Register setzen
36
  UCSR0B |= (1<<TXEN0);        // Bit setzen zum Senden
37
  UCSR0C = (1<<UCSZ1)|(1<<UCSZ0);      // Übertragungsformat einstellen 1 Byte/keine Parität/1 Stop bit/ Asynchron
38
  
39
}


Es wäre nett wenn mir evtl. jemand auf die Sprünge helfen kann.

Viele Dank schonmal im voraus.

von Andre W. (and12121)


Lesenswert?

Achja, im moment wird am Terminal nur Nullen angezeigt.

von g457 (Gast)


Lesenswert?

> Achja, im moment wird am Terminal nur Nullen angezeigt.

Im Sekundentakt?

Unabhängig davon: Warnungen sind entgegen landläufiger Meinung nicht 
dafür da um ignoriert zu werden.

von Andre W. (and12121)


Lesenswert?

Ja im Sekundentakt werden jeweils Nullen hinzugefügt.

von Andre W. (and12121)


Lesenswert?

Und die Warnungen verstehe ich ehrlich gesagt nicht.

von g457 (Gast)


Lesenswert?

> Ja im Sekundentakt werden jeweils Nullen hinzugefügt.

Dann darf man davon ausgehen dass F_CPU mit der Realität in Einklang 
ist.

> Und die Warnungen verstehe ich ehrlich gesagt nicht.

Du hast Die Klammern beim Define für BAUD vergessen - hier passiert aber 
(leider) nix, weil die Operatorpräzedenzen richtig(tm) sind. Ist 
trotzdem schlechter Stil und extrem Fehleranfällig (vulgo Tretmine für 
die Zukunft).

Wenn wir schon beim schlechten Stil sind: UCSZ1, UCSZ0 und UDRE heissen 
eigentlich UCSZ01, UCSZ00 und UDRE0, dann brauchts auch dafür keine 
Defines.

Wie sehen denn die restliche Hardware und die Einstellungen an Deiner 
Seriellen aus?

von g457 (Gast)


Lesenswert?

> Klammern beim Define für BAUD

arrgs, streiche BAUD, setze UBRR </ingrid>

von Andre W. (and12121)


Lesenswert?

Okay vielen Dank :) Warnungen sind raus.

Was meinst du genau mit restlicher Hardware?

 Und serielle Einstellung muss ich ehrlich sagen hab ich eig nichts 
weiter eingestellt. Du meinst nicht die Einstellungen im Terminal oder?

von Andre W. (and12121)


Lesenswert?

g457 schrieb:
>> Klammern beim Define für BAUD
>
> arrgs, streiche BAUD, setze UBRR </ingrid>


verstehe ich ehrlich gesagt nicht was du damit jetzt genau meinst?

von no Name (Gast)


Lesenswert?

Hallo,
 der AVR hat laut der Arduino- Website einen 16 MHz Quarz;)

von no Name (Gast)


Lesenswert?

Hallo,
 der AVR hat laut der Arduino- Website einen 16 MHz Quarz;)
Also muss F_CPU 16000000UL sein

von g457 (Gast)


Lesenswert?

> der AVR hat laut der Arduino- Website einen 16 MHz Quarz;)

Oi, das ist wahr. Und ich stelle fest: Redifinition gibt keinen error 
sondern eine warning.. Dann müssten die Nullen aber schneller kommen als 
im Sekundentakt.

von Andre W. (and12121)


Lesenswert?

Ich muss gestehen, dass ich das nach dem posten schon geändert hatte. 
Aber vielen Dank!

Trotzdem funktioniert es nicht wie gewollt. Hab bis jetzt auch noch 
nichts gefunden, was mir weiter hilft...

von g457 (Gast)


Lesenswert?

> Und serielle Einstellung muss ich ehrlich sagen hab ich eig nichts
> weiter eingestellt. Du meinst nicht die Einstellungen im Terminal oder?

Ja, da sollte zweckmäßigerweise das selbe(tm) eingestellt sein wie Du am 
AVR konfiguriert hast.

Achja, wenn wir schon dabei sind: Falls Du noch den Bootloader drauf 
hast vom Arduino - der setzt afair u.a. U2X0 im UCSR0A, also ∗alle∗ 
Uart0-Register sauber initialisieren.

von Andre W. (and12121)


Lesenswert?

Es läuft! Vielen Dank für die Mühe. Fehler lag in den Einstellungen im 
Termiinal.

Hatte die Baud nicht eingestellt. :(

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.