Hallo, ich bin hier erst neu dabei. Um es kurz zu fassen: Ich habe derzeit noch keinen Controller, da ich noch nicht weiß ob die richtige Wahl getroffen habe. Mein Vorhaben: Via USB Daten(8-Bit) an den Controller senden(hierfür würde ich einen FTDI FT232RL benutzen wollen). Auf den gleichem Weg sollen Daten(ebenfalls 8 Bit) vom Controller zurückgesendet werden. Das Problem ist, das ich die Daten sehr schnell bereitstellen muß, dachte dann an 115200Baud und an eine ATMega8-16MHZ. Leider weiß ich nich so wirklich wie ich überhaupt mit der Schnittstelle klar komme. Ich würde gerne ein Hardware-Prokoll fahren, weil ich die kompletten 256 Byte-Werte brauche. Wäre nett wenn Ihr für mich mir einige Tipps und/ oder Anregungen hab. -- Gruß Scotty
Hallo, nein, irgendwie steht da nicht was ich brauche. Die Tutorials hatte ich mir schon angeschaut, auch einige Datenblätter, aber finde kein konkretes Beispiel wie ich den Controller initialisieren muss. Nun werde noch mal weiter schauen. Habe da aber nochmal etwas anderes. Es sind immer wieder einzelne Pins von den Ports "doppelt" belegt. Konkretes Beispiel wäre hier PD0, PD1, PD4 und PD5. Diese Pins werden als Steuerleitungen für RS232 benutzt. Nun möchte ich aber einen Teil der verbleibenen Pins als Ausgang benutzen. Was passiert aber nun, wenn ich dass DDRD-Register lade, bspw. mit ldi R16, 0b11111111 out DDRD, R16 ; Port D als Ausgang setzen Bleiben die oben genannten Pins davon unberührt? Oder muss ich die Richtungen der Leitungen beachten? Also so: ldi R16, 0b11011110 out DDRD, R16 ; Port D als Ausgang setzen Damit sollten die dementsprechenden Steuerleitungen eigentlich in der richtigen Richtung sein, also PD0(RXD) und PD5(T1 oder besser CTS) als Eingang. In diesem Fall ist es ja noch einfach. Aber was wenn ich den I²C(TWI) benutzen will? Dort sind es dann die Pins PC4(SDA) und PC5(SCL). PC4(SDA) ist auf jeden Fall bidirektional. Danke für jede Hilfe -- Gruß Scotty
Im Regelfall werden diese Pins bei Aktivierung der entsprechenden Zusatzfunktion (also: wenn du zb die UART aktivierst) von der normalen Konfiguration abgekoppelt. Du brauchst dich dann daher nicht weiter um diese Pins kümmern bzw. entsprechend ihrer Zusatzfunktion im DDR Register konfigurieren. Es gibt ein paar Ausnahmen (aus dem Gedächtnis: die PWM-Output Pins), die sind aber im Datenblatt dokumentiert.
Im Zweifelsfall nimm einen mega16 oder mega32 wenn Du noh zusätzliche PINs brauchst. Gruß Tom
Hallo Tom, das ist wohl kaum die Antwort, die mich nach Vorne bringt. :=( Alleine bei der Nutzung der seriellen Schnittstelle würde das bedeuten, das die Ports B und D nicht mehr nutzbar wären, kann ich mir nun wirklich nicht vorstellen. Irgendetwas muss es aber geben, sonst würde das Beispiel zu "Zeichen empfanden" im Tutorial http://www.mikrocontroller.net/articles/AVR-Tutorial:_UART nicht funktionieren: .include "m8def.inc" ;... ; Port D = Ausgang ldi temp, 0xFF out DDRD, temp ;... sbi UCSRB, RXEN ; RX (Empfang) aktivieren receive_loop: sbis UCSRA, RXC ; warten bis ein Byte angekommen ist rjmp receive_loop in temp, UDR ; empfangenes Byte nach temp kopieren out PORTD, temp ; und an Port D ausgeben. rjmp receive_loop ; zurück zum Hauptprogramm Wie soll das funktionieren, wenn an PortD die Steuerleitungen der RS232 angeschlossen sind. Immerhin wird hier auch "nur" ein Mega8 benutzt. -- Gruß Scotty
Bei benutzung der UART werden PD0/PD1 bei Mega8 verwendet. Diese sind nicht mehr als I/O nutzbar, der Rest vom Port schon. RS232 benötigt ja nur drei Pins (Rx/Tx/GND).
es werden nur die pins RXD und TXD in Ihrer Funktion geändert alle anderen bleiben bestehen
Hi Ich denke, es ist der Ansatz "Ich brauche die Handshake-Leitung", der zu diesem Irrtum führt. Selbst, wenn du über RTS /CTS die Übertragung koordinierst, brauchst du nur 2 Bits. Der UART im µC macht's soweit ich weiß, nicht automatisch, aber diese Signale nachzubilden und auf Ausgang und Eingang zu legen dürfte kein so großes Problem sein. Ich muß gestehen, meine Datenübertragung geht nur über RX/TX und GND und ich hab mit der Übertragung aller Werte keine Probleme. Allerdings ist die PC Seite speziell dafür eingerichtet und ich habe dort die Applikation in Delphi laufen. Soweit ich weiß, gibt es eine freie Delphi - Version im Netz. Aber es würde auch mit VB gehen, die Daten zu empfangen und auf eine DB zu schreiben. Gruß oldmax
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.