www.mikrocontroller.net

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

Autor: weissvonnix (Gast)
Datum: 04.09.2007 00:17
Dateianhang: main_repeat.c (6,4 KB, 121 Downloads) | formatierter Code

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.

:-?
Autor: Martin (Gast)
Datum: 04.09.2007 07:41

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?
Autor: Martin (Gast)
Datum: 04.09.2007 07:51

Du schreibst

> wake up 1111 xxxx xxxx xx00

Warum dann

> void ssu_transmit(void)
>{
>  sstdr = 0B00111111;  // data present in sstdr register
>  wait();
>       .
>       .
Autor: weissvonnix (Gast)
Datum: 04.09.2007 09:18

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) :-/
Autor: Judge (Gast)
Datum: 05.09.2007 21:26
Dateianhang: main_repeat.c (5,8 KB, 122 Downloads) | formatierter Code

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

Antwort schreiben

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

Wichtige Regeln - erst lesen, dann posten!

  • Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
  • Aussagekräftigen Betreff wählen
  • Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
  • JPEG-Dateien (.jpg) nur für Fotos und Scans verwenden
  • Schaltpläne, Screenshots usw. als PNG oder GIF anhängen

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel





Hinweis: der Originalbeitrag ist mehr als 6 Monate alt.

webmaster@mikrocontroller.netImpressumWerbung auf Mikrocontroller.net