Forum: Mikrocontroller und Digitale Elektronik Erstes ATMega8-Projekt


von Scotty (Gast)


Lesenswert?

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

von Korinthenkacker (Gast)


Lesenswert?


von Scotty (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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.

von Thomas B. (escamoteur)


Lesenswert?

Im Zweifelsfall nimm einen mega16 oder mega32 wenn Du noh zusätzliche 
PINs brauchst.

Gruß
Tom

von Scotty (Gast)


Lesenswert?

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

von Bastler (Gast)


Lesenswert?

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).

von Dennis U. (atmegadennis)


Lesenswert?

es werden nur die pins RXD und TXD in Ihrer Funktion geändert alle 
anderen bleiben bestehen

von oldmax (Gast)


Lesenswert?

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