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
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.
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.