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.
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).
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
Eine eigene Frage?
Dieser Thread ist über 16 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.