Forum: Mikrocontroller und Digitale Elektronik USART Arduino Micro Registerkonfiguration


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Frank K. (bob_bob)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich bin der Neue :-) Ich habe schon ein wenig mit Arduino 
experimentiert. Nun habe ich angefangen mich mit der 
Registerkonfiguration zu beschäftigen. Ich arbeite mit einem Micro 
vorrangig. Timer, Interrupts habe ich schon erfolgreich per 
Registerkonfiguration zum laufen gebracht.

Nun möchte ich gerne per USART Daten verschicken.
Dazu habe ich erstmal folgende Idee. Ich lasse von 0 bis 255 im Programm 
hochzählen und die jeweilige Zahl soll erstmal auf dem Monitor angezeigt 
werden. Ich habe sowohl den seriellen Monitor der Arduino IDE als als 
PUTTY verwendet. Mit Serial.print() alles kein Problem.

Nur wie bekomme ich das per Registerkonfig. angezeigt.
Mein bisheriger Code:
#define F_CPU 16000000
#define BAUDRATE 9600
int neueZahl = 0;
unsigned char akku = 0;
unsigned char l,m,r; //Variablen für Anzeige linke, mitte, rechts
unsigned int baudregister = (F_CPU/16/BAUDRATE)-1;
void setup()
{

    UBRR1H = (unsigned char) (baudregister>>8); //Setzen des HIGH-Bytes 
des Baudraten-Registers
    UBRR1L = (unsigned char)  baudregister;     //Setzen des LOW -Bytes 
des Baudraten-Registers
    //UBRR1 = baudregister;  //Alternativ???

    UCSR1A = (0<<U2X1);

    UCSR1B = (1<<RXEN1)|(1<<TXEN1) |(0<<UCSZ12);

    UCSR1C = (0<<UMSEL11)|(0<<UMSEL10)|(0<<USBS1)|(1<<UCSZ11)
            |(1<<UCSZ10);
    //Register mit Initwert 0 müssen eigentlich nicht wieder mit 0
    //initialisiert werden.
}

void loop()
{
  l = akku/100;
  m = (akku%100)/10;
  r = akku%10;

  if(UCSR1A & (1<<UDRE1))
    UDR1 = l+48;
  if(UCSR1A & (1<<UDRE1))
    UDR1 = m+48;
  if(UCSR1A & (1<<UDRE1))
    UDR1 = r+48;
  if(UCSR1A & (1<<UDRE1))
    UDR1 = "\n";
  if(UCSR1A & (1<<UDRE1))
    UDR1 = "\r";
  akku++;
  delay(1000);
  //Serial.print(l);
  //Serial.print(m);
  //Serial.print(r);

  if(UCSR1A & (1<<UDRE1))
  UDR1 = akku;
  //Wie bekomm ich UDR1 auf den Bildschirm???
}

Wie bekomm ich jetzt UDR1 angezeigt????

Gruß bob_bob

: Bearbeitet durch User
von Peter II (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Frank K. schrieb:
> Wie bekomm ich jetzt UDR1 angezeigt????

was meinst du damit? Das was du in UDR1 reinscheibt wird doch gesendet.

von Frank König (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Gibt's noch ne extra Schritt um die Zahl auf dem Monitor auszugeben? Da 
bleibt alles still. Baudrate ist passend eingestellt.

von Frank König (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Der Micro ist per USB Kabel mit dem PC verbunden.
Im Datenblatt ist bei den Registerkonfiguration immer das "n" für das 
jeweilige Register. Es funktioniert nur die "1", bei "0" bzw alle 
anderen Zahlen wird mir ne Fehlermeldung gegeben.

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]
  • [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.