brauche Hilfe :- R8C1B mit SSU

Gast #646390
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.

:-?
Angehängte Dateien:
Gast #646431
Du schreibst

> wake up 1111 xxxx xxxx xx00

Warum dann

> void ssu_transmit(void)
>{
>  sstdr = 0B00111111;  // data present in sstdr register
>  wait();
>       .
>       .
Gast #646486
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) :-/
Gast #648004
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
Angehängte Dateien:

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 19 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.