Mit dem MSP430 soll über SPI z.B. in einem MAX 1407 (mit integriertem Uhrenbaustein) die Uhr gestellt werden. Dazu habe ich folgendes Programmteil (in C) verwendet: void Sekunden_stellen(void) { char sek_schr = 0xA0, sek=00; // in sek die aktuelle Sekunde eintragen Beispiel: 00 P2OUT &=~BIT5; //mit CS=L --> Freigabe TXBUF0 = 0x9C; //RTC/AL Steuerregister beschreiben Pause(); TXBUF0 = 0x80; // 1000 0000 Pause(); TXBUF0 = sek_schr; Pause(); TXBUF0 = sek; Pause(); TXBUF0 = 0x9C; // RTC/AL Steuerregister schreiben (zurücksetzen) Pause(); TXBUF0 = 0x00; } Obwohl das Stellen funktioniert, stören mich die Pauseschleifen, deren Länge ich durch Probieren ermittelt habe. Wie könnte man das Programm so schreiben, dass immer nur solange gewartet wird, bis der Sendevorgang abgeschlossen ist? Ich hatte es mir so gedacht: TXBUF0 = 0x9C; //RTC/AL Steuerregister schreiben 10 01110 0 while (IFG1&UTXIFG0); TXBUF0 = 0x80; // 1000 0000 while (IFG1&UTXIFG0); . . Geht leider nicht, (einige Sendepakete werden weggelassen) da ich vermutlich mit while (IFG1&UTXIFG0) auf dem Holzweg bin Wie könnte man das Programm ändern, damit immer solange gewartet wird, bis ein einzelner Sendevorgang abgeschlossen ist? MfG Wolfgang
Hmm vielleicht schafft der ausgangsbaustein solche übertragungsraten nicht? (Ich kenn mich mit uart nicht aus aber bei i2c kann das z.b passieren kann auch sein das der uc die raten nicht schafft ist bei dir aber unwahrscheinlich da du ja wartest bis der uc fertig ist) Die while lösung ist auch nicht zu verwenden sondern man sollte besser mit interrupts arbeiten wenn man sowieso schon welche hat;) mfg Flo
Hallo Wolfgang, soweit ich weiß mußt du das TXEPT - Flag abfragen (Transmitter empty Flag), d.h. du darst nur Daten laden, wenn dieses gesetzt ist. Viel Grüße, Holger
Nein, der Fehler ist, dass die Bedingung für das Busy-Flag genau falsch herum ist. Es muss lauten: while (!(IFG1 & UTXIFG0)) Guck dir mal meine USART-Libary auf www.mathar.com an. Ich habe nach dem Fehler damals aber auch Stunden gesucht ... ;-)
Nur gut, dass ich damit nicht Geld verdienen muss und dass es das Mikrocontrollerforum gibt. Mit while (!(IFG1&UTXIFG0)) funktioniert es bestens. Danke Sebastian! Wollte mir Deine Software mal ansehen, kann sie aber unter MSP430/USART1 bzw. USART2 nicht finden. MfG Wolfgang
Hi, den Link zu der Library usart.c findest du hier (erster Absatz): http://mathar.com/msp_thermo2.html Eine Erklärung, wie das mit den USART-Flags funktioniert, habe ich hier: http://mathar.com/msp_funk2.html
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.