PIC18F46K80 USART C18

OP #4714530
Lesenswert?
• ▲
▼
Hallo Zusammen,

ich frage mit dem PIC18F46K80 einen externen Thermometer über RS-485 ab. 
Das Grundgerüst läuft auch (siehe nachfolgend).

Über einen Taster stelle ich die Adresse des Thermoters ein. Ist der 
Thermoeter mit der eingestellten Adresse am Bus angeschlossen, ist alles 
prima. Ist der Thermometer nicht am Bus angeschlossen kommt auch keine 
Rückmeldung, und genau das ist das Problem.
1
       if (B1_PRESSED) 
2
      {
3
            while(Busy1USART());
4
            //printf("*B1TR\r");
5
            printf("*B");
6
            printf("%c",uint_Adresse + 0x30);
7
            printf("TR\r");
8
            
9
            //und hier muss die IF-Schleife verändert werden. Der Controller springt immer in die If-Abfrage und bleibt an der String Abfrage stehen. Über den Watchdog oder Timer kann man das bestimmt machen. Allerdings glaube ich dass man das auch einfacher machen kann. Mit PIR.RCIF habe ich auch schon getestet keine Veränderung.
10
            if (!DataRdy1USART())
11
            {
12
                //gets1USART(str_USART,12);
13
                gets1USART(str_USART,sizeof(str_USART));
14
                //*B10+23,2C inkl. Newline
15
                LCD_PRINTF(2,6, (const MEM_MODEL rom char *)"%.7s", str_USART + 4);
16
                //*B10+023.2C -> z.b. +023.2C
17
            }
18
            else
19
            {  
20
                LCD_PRINT(1,0,"Adresse: ");  
21
                LCD_PRINT(2,0,"Temp: ");
22
                LCD_PRINTF(1,9,(const MEM_MODEL rom char *)"%i",uint_Adresse);  
23
            }
24
          }

Danke und Gruß
Ingo
#4714661
Lesenswert?
• ▲
▼
Wahrscheinlich ist dir irgendwie nicht klar wie lange es dauert ein 
einziges Byte zu übertragen im Verhältnis dazu, einen Befehl 
auszuführen.

Das nächste Problem wird sein, dass gets1USART eine "blocking funktion" 
ist. Das heißt, sie blockiert dein Programm so lange, bis der 
angeforderte String empfangen wurde. Wenn kein Sensor antwortet, dann 
ist dein Programm im Ar...

Du könntest solange warten, wie es maximal dauert, bis ein Sensor 
antwortet. ( Das erste Byte ) Ist dann nichts da, ist auch kein Sensor 
mit dieser Adresse dann...

Grundsätzlich wäre eine Statemachine mit Timeout wohl das Beste. Das 
wurde bedeuten, einen Sensor abzufragen und nicht direkt auf die Antwort 
zu warten. Wenn allerdings nicht innerhalb einer vorgegebenen Zeit eine 
Antwort kommt, dann ...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren