Forum: Mikrocontroller und Digitale Elektronik brauche Hilfe :- R8C1B mit SSU


von weissvonnix (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,
ich bräuchte ein wenig Hilfe.

Mein 'Material' :
- R8C1B RSK dazu DACs und noch zwei drei Schalter
Mein Vorhaben :
- R8C1B soll via SSU die beiden DACs ansteuern
- die Schalter will ich ganz normal mit nem PIN ansteuern (ein/aus)
- dazu noch den integrierten AD Wandler nutzen
Mein Problem :
Abgesehen davon, dass µController Neuland für mich sind ist mein Problem 
: SSU, irgendwie klappt das nicht. Habe einen DA der grob zwei 
Anweisungen versteht, je 16 Bit (MSB -> LSB):
1. wake up 1111 xxxx xxxx xx00
2. set/update 0000 12-bit-code
Angehangen meine Main , da wollt ich den DA nur 'aufwecken' und 
irgendein Wert ausgeben lasse. Aber es kommt nix raus aus dem DA :-( Als 
CS für den DA hab ich P1_2 genommen.

:-?

von Martin (Gast)


Lesenswert?

Mit SSU meinst du Syncron Serial Unit , oder?
Was hast du denn für einen DA?
Was zeigt denn dein Oszi an, wenn du mal an der Schnittstelle mist?

von Martin (Gast)


Lesenswert?

Du schreibst

> wake up 1111 xxxx xxxx xx00

Warum dann

> void ssu_transmit(void)
>{
>  sstdr = 0B00111111;  // data present in sstdr register
>  wait();
>       .
>       .

von weissvonnix (Gast)


Lesenswert?

Hallo,

1. hab leider kein oszi hier :-( und ja, SSU ist das clocksynchronous 
serial interface with chip select (also SPI), habe einen MAX5712 
http://pdfserv.maxim-ic.com/en/ds/MAX5712.pdf

2.
> ich schrieb :

>> wake up 1111 xxxx xxxx xx00

> Warum dann

>> void ssu_transmit(void)
>>{
>>  sstdr = 0B00111111;  // data present in sstdr register
>>  wait();
>>       .

ich dachte, damit würde ich xxxx xx00 schicken? oder tue ich das damit 
nicht ? also die Bit 0 bis 7 für das wake up. Und ich kann ja sehen, 
dass die Bits dann im SSTDR stehen, werden die dann automatisch 
geschickt? leider sehe ich das Shift register nicht (sstrsr) :-/

von Judge (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe Dein Programm mal dahingehend angepasst, dass es den MAX5712 
korrekt anspricht. Wenn Du "0B00111111" in das Register sstdr 
hineinschreibst, kommt natürlich "11111100" heraus (LSB first).

Auf die Bitzuweisungen solltest Du bei der SSU verzichten, da der 
Compiler hieraus zwangsläufig bit-Befehle ("bset...", "bclr...") 
generiert. Da dies read-modify-write-Instruktionen sind verstösst Du 
damit gegen die Usage Notes der SSU ("After waiting three instructions 
or more after writing to the registers associated with clock synchronous 
serial I/O with chip select or four cycles or more after writing to 
them, read the registers.").
Die 10 "nop" Wartezeit sind auch etwas kurz definiert sofern die CPU mit 
vollem Takt läuft. Es ist besser die entsprechenden Flags abzufragen um 
zu schauen ob die SSU wieder übertragungsbereit ist (TEND bzw. TDRE).

Gruss,
Judge

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.