Forum: Mikrocontroller und Digitale Elektronik Hat jemand mal einen Beispielcode für den UART (90S2313) ?


von Michael K. (onkel_michi)


Lesenswert?

Hallo,

ich habe hier eine Hand voll AT90S2313 und bin nun dabei mir die ersten
Gehversuche mit den Teilen anzueignen.

Das erste Projekt: Schnittstellenwandler RS232-->Centronics

ging schon böse in die Hose.

Ich habe mir nun gedacht, das es wohl besser ist, erst einmal die
Basics zu lernen und das nicht so, das man aus heruntergeladenem Code
die Teile wegmacht, die man nicht braucht.

Ich brauche ein möglichst einfaches Programm, das nur ein Zeichen /
String auf dem UART mit 9600 Baud ausgibt.

Die Stücke aus dem AVR-GCC Tutorial (Habe ich gewissenhaft 3 mal
durchgelsen und dann im Forum mindestens 50 versch. Stellen mit
Beispielcode, der nach dem Zusammenstutzen nicht mehr lief.)

Ich weiß sehr wohl, das ich bei 8MHz eine 51 in UBRR laden muß und das
ich warten muß bis Bit 5 im UDRE 1 ist.
Auch weiß ich, das ich mit UDR=Zeichen, das Zeichen zum Senden schicke,
aber ich krieg die Abfolge im Programm nicht gebacken.

C habe ich schon mal Programmiert und einfache Sachen, wie das
Einschalten einer LED auf Tastendruck oder eine Bitfolge (ein Zeichen)
an einen Drucker mit Parallelschnittstelle schicken, hat schon
geklappt.

Nur das mit dem UART kriege ich nicht hin.

Ich weiß, das es unverschämt ist, aber kann mir bitte jemand einen Link
oder ein Programm sagen, mir Deppen hilft, meinen Fehler zu finden ??

Danke.

Michael

von Rahul D. (rahul)


Lesenswert?

Wenn due hier duch Suchen nichts findest, solltest du mal ins complete
Datenlatt gucken. Da sind in der Regel solche Sachen recht gut erklärt.

von Michael K. (onkel_michi)


Lesenswert?

Wenn Du mit dem complete Datenblatt das DOC0839 von Atmel meinst ...

Das habe ich schon mehrmals gelesen.
1
#include <avr/io.h>
2
3
int main ()
4
 {
5
   
6
   char x='x';
7
   DDRD=255;
8
9
// Vorerst nur senden, also nur Transmitter einschalten;
10
11
  UCR |= (1<<TXEN);
12
13
  UBRR = 8000000 / (9600 * 16L) - 1;
14
15
     while (!(USR & (1<<UDRE)))  /* warten bis Senden moeglich  */
16
             {
17
             
18
              }
19
            UDR = x; /* schreibt das Zeichen auf die Schnittstelle */
20
21
   }

So weit bin ich. Aber irgendwas fehlt da, damit das Zeichen am Terminal
rauskommt.

Weil ich mir mit der Harware nicht sicher war, hatte ich irgendwelche
Assemblerprogramme kompiliert und in den 2313 reingebacken. Da kamen
dann Sachen auf der RS232 raus. Aber ich schließlich kapieren, wie das
geht.

Das mit dem Kapieren klappt im Moment aber wohl nicht.

Gruß

Michal

von Kai Markus Tegtmeier (Gast)


Lesenswert?

Hallo!

Wenn Du Dir nicht sicher in der C-Programmierung bist, ist eventuell
der C-Compiler von Codevision eine Einstiegshilfe. Da kann man sich mit
einem "Code Wizard" ein Grundprogramm zusammenbauen lassen, in dem die
wichtigsten Initialisierungen gemacht werden. Eine Testversion bis 2kB
Code (die bei Dir völlig ausreichen sollte) gibts AFAIK bei
www.hpinfotech.ro

Später, wenn Du etwas sicherer in AVR-C bist, kannst Du dann auf WinAVR
umsteigen...

Greetz
KMT

von Michael K. (onkel_michi)


Lesenswert?

Danke für den Tipp,

ich benutze aber nur und ausschließlich Linux.

Ich konnte mein Problem gestern selber lösen.

Die Entwicklungsumgebung (KDevelop für Ethernut angepasst) im Hobbyraum
hatte noch das Makefile für den ATmega128 auf dem Ethernut.

Gestern hatte ich dann mal mein Projekt mit dem Schnittstellenwandler
auf dem Laptop (Da ist nur der AVR GCC und die binutils drauf) mit
einem selbstgestrickten Makefile kompiliert und das klappt jetzt
einigermaßen.

Auch Sachen mit dem UART in die RS232 schreiben klappt jetzt. War also
nur eine Softwaresache.

Michael

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.