Hallo zusammen,
ich habe eine Frage zur EUSART Schnittstelle des PIC12F1822. Diese
Schnittstelle bietet zum einen das Feature bei Aktivitäten am RX-PIN
aufzuwachen (mittels WUE-Bit setzen) und zum Anderen die Möglichkeit die
BAUD-Rate automatisch zu ermitteln indem ein 'U' empfangen wird
(Stichwort: auto baud-rate detection). Nun verstehe ich noch nicht ganz,
wie das aufwachen ausgelöst wird. Im Datenblatt ist die Rede von einem
Break-Character der aus mindestens 10 Nullen bestehen soll. Die Frage
ist, von welcher BAUD-Rate hängt dies ab. Muss diese bereits gesetzt
worden sein? Die Idee in meiner Applikation wäre ein Byte mit 10 Nullen
zu senden und anschließend ein 'U' sodass die BAUD-Rate detektiert wird.
Ist das möglich und wenn ja was muss ich beachten. Folgende
Vorgehensweise habe ich bisher erfolglos versucht:
1 | void init_eusart()
|
2 | {
|
3 | CREN = 1;
|
4 | SYNC = 0;
|
5 | SPEN = 1;
|
6 | RXDTSEL = 1;
|
7 | TRISA5 = 1;
|
8 | return;
|
9 | }
|
1 | void st_sleep()
|
2 | {
|
3 | ABDEN = 1;
|
4 | WUE = 1;
|
5 | SLEEP();
|
6 | char x = RCREG;
|
7 | while(!RCIF && ABDEN && !ABDOVF);
|
8 | if(ABDOVF)
|
9 | {
|
10 | test1();
|
11 | DelayUs(5000);
|
12 | test1();
|
13 | }
|
14 | else
|
15 | {
|
16 | char x = RCREG;
|
17 | test1();
|
18 | }
|
19 | return;
|
20 | }
|
Die Funktion test1() lässt einen Pin 255 mal toggeln. Momentan toggled
nichts. Die vereinfachte main():
1 | int main()
|
2 | {
|
3 | init_clock();
|
4 | init_eusart();
|
5 | while(1)
|
6 | {
|
7 | st_sleep();
|
8 | }
|
9 | return 0;
|
10 | }
|
Quintessens der Frage ist ob für ein Wake-Up die Baud-Rate bekannt sein
muss.
Vielen Dank für Eure Hilfe.
lowlevel