Forum: Mikrocontroller und Digitale Elektronik SIO3,4 beim M16C


von Daniel Üsentrieb (Gast)


Lesenswert?

Hallo zusammen,

in den M16C-Controllern von Renesas, bei mir speziell auf dem M16C29,
gibt es zwei serielle Schnittstellen SIO3,4. Das Versenden klappt
wunderbar, nur weiss ich nicht wie ich empfange. Das Versenden wird
durch Schreiben in das Sende/Empfangs-Register initiiert.
Wie kann ich nun empfangen wenn der Takt nur solange aktiv ist wie ich
etwas in das Register schreibe?
Hat schon jemand mit dieser Art von Schnittstellen Erfahrung gemacht
und kann mir ein Hinweis geben?

Gruß an alle

von Ralph (Gast)


Lesenswert?

Hi,

du musst ein sogenanntes Dummy-Byte rausschicken um für das empfangene
Gerät Takte erzeugen, dabei etwas warten bis die Takte durch sind (Die
Wartezeit ergibt sich aus der Baudrate). Ich habe mal meine Ansteurung
für einen 12-Bit AD-Wandler (==> bei 8Byte Datenbreite auf 2mal
holen)in Pseudocode geschrieben:
(s3trr = sio3 transmit receive register), ADC_COM=Kommando Byte als
define

ADC_ON                          //Chip select für ADC low -->aktiv
wait_s(15);              //kurz warten  bis ADC initialisiert
s3trr = ADC_COM;               //Kommando schicken (Kanal,conf. usw.)
wait_s (15);                //warten bis draußen
High Byte = s3trr;           //High Byte reinholen
s3trr     =  DUMMY_BYTE;        //dummy (irgendwas)f. 8 weitere Takte
wait_s (15);                //warten bis 8 Takte rum
low Byte = s3trr;           //low Byte holen
ADC_OFF                  //Chip Select geht high --> inaktiv

Ist Anfangs ein Problem die Zeiten festzulegen, ein Oszi hilft, falls
vorhanden.

Ich hoffe es hilft ein wenig
Grüße Ralph

von Daniel Üsentrieb (Gast)


Lesenswert?

Hallo,

Danke schon mal für die Antwort, aber es funktioniert immer noch nicht.
Ich verstehe nicht, dass du nachdem du den Befehl raus schickst gleich
wieder einliesst, du musst doch erst den Dummy schicken um Takte zu
erzeugen?
Kann es an den Einstellungen liegen? Was hattest du für Einstellungen?
Bei mir geht es um ein serielles EEPROM von Microchip (25AA256).
Ich hoffe ich habe einen Geistesblitz übers Wochenende.

Gruß an alle

von ,,,, (Gast)


Lesenswert?

> dass du nachdem du den Befehl raus schickst gleich wieder
> einliesst

Macht er ja nicht, dafür ist ja wait_s() da.

von Daniel Üsentrieb (Gast)


Lesenswert?

hallo,

mir ist schon klar das er wartet, jedoch sollte er nach dem Warten
einen Dummy-Befehl senden, um Takte zu erzeugen oder liege ich da
falsch?

von Ralph (Gast)


Lesenswert?

Hi,

sorry, das hat jetzt länger gedauert, ich war unterwegs. Nochmal etwas
ausführlicher:

s3trr = ADC_COM;
//Kommandobyte wird über SIOout rausgetaktet. Wandler schickt
gleichzeitig High Byte der letzten Wandlung über SIOin rein.
Ansprechbar ebenfalls über s3trr (Gleicher Name für IN und OUT, CPU
unterscheidet beim lesen und schreiben).
wait_s (15);                //warten
High Byte = s3trr;
//abholen bis reingetaktet (Takt ist der Schreibtakt vom Kommandobyte)
//Hier fertig mit HighByte. Wandler hat aber noch 4 weitere. Also:

s3trr     =  DUMMY_BYTE;    //dummy (irgendwas)f. 8 weitere Takte
//Wandler schickt mit den Schreibtakten die 4 lowBits der letzten
//Wandlung
wait_s (15);                //warten bis 8 Takte rum
low Byte = s3trr;           //low Byte holen. Fertig.


Drei Dinge sind vielleicht verwirrend:
1. SIO In und Out über den gleichen Namen anzusprechen. Intern sind das
natürlich verschiedene Register.
2. Der Wandler hat nochmal einen eigenen Wandel-Takt, der deutlich
höher ist als der Schiebetakt.
3. Man erhält immer das Ergebnis der letzten Wandlung. Da muss man sehr
aufpassen. Besonders am Anfang und bei Kanalwechsel. Also:
Kommunikation1 gibt das Ergebnis für Kommunikation2 vor.

So ich hoffe Du bist nicht allzu verwirrt. Bei mir hats auch eine Zeit
gedauert bis das alles lief. Deshalb nur Mut und ein bisschen
rumspielen, Zeiten ändern usw. Oszilloskop zur Hand? Dann die Sende und
Empfangsleitung abhören.

Viel Erfolg und Grüße Ralph

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.