www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik SIO3,4 beim M16C


Autor: Daniel Üsentrieb (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Ralph (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Daniel Üsentrieb (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: ,,,, (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> dass du nachdem du den Befehl raus schickst gleich wieder
> einliesst

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

Autor: Daniel Üsentrieb (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Ralph (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.