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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.