Port / Pin abfragen

    This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

    • Port / Pin abfragen

      Ich stehe im moment komplett auf dem Schlauch. Wieso kann ich mit diesem Programm nicht den Zustand von PORTA.1 abfragen ?
      Der Port hat einen externen PullUp Widerstand, der Taster zieht den Pin nach GND. Die Abfrage ergibt immer 0, Taster gedrückt oder nicht.

      $regfile = "m32def.dat"
      $crystal = 8000000
      $hwstack = 40
      $swstack = 40
      $framesize = 60

      Config Porta.1 = Input 'externer Pullup-Widerstand

      Do
      Print Pina.1
      Loop

      End
    • Danke auch für diese Antwort.
      Ist es leider auch nicht. Der Text wird problemlos dargestellt. An der Baudrate kann es also nicht liegen.

      $regfile = "m32def.dat"
      $crystal = 8000000
      $hwstack = 40
      $swstack = 40
      $framesize = 60

      Dim A As Byte
      Config Porta.1 = Input 'externer Pullup-Widerstand
      Print "Hallo Welt"
      Wait 3

      Do
      A = Pina.1
      Print A
      Loop '

      End
    • Ah, du schreibst zwar 'pullup', du hast ihn aber nicht eingeschaltet. Dazu brauchst du noch den Befehl
      porta.1=1. damit wird er eingeschaltet, per default ist es aus.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • tschoeatsch wrote:

      ch vermute, print geht nur mit Variablen. Versuche mal dim a as byte
      do
      a=pina.1
      print a
      loop


      Genauso muss es funktionieren.

      Was noch möglich ist der Pullup ist zu groß.

      Für test würde ich den int. Pullup aktivieren

      Pina.1 =1

      Port A ist bedingt durch ADC- Betrieb sehr Hochohmig. Somit auch empfindlicher als die anderen.
    • Hi tschoeatsch,
      im ersten Posting schrieb er "externen Pullup", müsste also ein Widerstand auf dem Steckbrett sein :whistling:

      fredred wrote:

      Für test würde ich den int. Pullup aktivieren
      Internen Pullup aber dann mit Porta.1 = 1, oder?

      BASCOM Source Code

      1. Config Pina.1 = Input ' PA1 Auf Eingang schalten
      2. Porta.1 = 1 ' internen Pullup einschalten

      The post was edited 1 time, last by R2D2 Bastler ().

    • R2D2 Bastler wrote:

      Hi tschoeatsch,
      im ersten Posting schrieb er "externen Pullup", müsste also ein Widerstand auf dem Steckbrett sein :whistling:
      Stimmt, ich nehm' jetzt doch mal meine Gurkenmaske ab.
      Wie schaut es mit AVcc aus, ist der auch an Vcc angeschlossen? AVcc versorgt ja den porta (glaub' ich, es kann sein, dass AVcc nur den Adwandler versorgt.)
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Als bit definiert geht auch nicht.
      Ich habe jetzt versucht den Port als Anlaogport auszulesen. Das geht, ist aber ziemlich langsam.
      Kurioserweise geht jetzt mit dem config adc ... aber auch das Auslesen als Digitalport, ohne die Zeile config adc... gehts nach wie vor nicht.
      OK, jetzt könnte man sagen: schreib die Zeile doch einfach rein und gut ist. Aber es wäre doch schön zu wissen warum das so ist.

      $regfile = "m32def.dat"
      $crystal = 8000000
      $hwstack = 40
      $swstack = 40
      $framesize = 60

      Dim A As Byte
      Config Porta.1 = Input 'externer Pullup-Widerstand

      Config Adc = Single , Prescaler = Auto , Reference = Avcc

      Wait 1
      Print "Hallo Welt"
      Wait 1

      Do
      A = Pina.1
      Print A
      Loop '

      End
    • Keine Lösung. Schalte mal alle internen pullups ein, mit porta=255 und dann a=pina, print a. Jetzt kannst du mit einem Drähtchen alle pins vom porta mal an gnd ziehen und schauen, ob zufällig pina.1 einen Defekt hat.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Ich hab das Programm nochmal kurz geändert (baud hat gefehlt, vertausche Abfrage usw.). Da ich es gerade auf einen Arduino nano geflasht habe, musste ich noch zusätzlich auf PinB.1 ausweichen (hab dort keinen PinA.1). Das folgende Programm funktioniert bei mir:

      Source Code

      1. $regfile = "m328pdef.dat"
      2. $crystal = 16000000
      3. $hwstack = 40
      4. $swstack = 40
      5. $framesize = 60
      6. $baud = 38400
      7. Config Pinb.1 = Input ' PB1 Auf Eingang schalten
      8. Portb.1 = 1 ' internen Pullup einschalten
      9. Wait 1
      10. Print "Hallo Welt"
      11. Wait 1
      12. Do
      13. If Pinb.1 = 1 Then
      14. Print "Taster nicht gedrueckt"
      15. Else
      16. Print "Taster gedrueckt"
      17. End If
      18. Wait 2
      19. Loop
      20. End
      Display All
      Wie sieht Dein Testaufbau aus (Steckbrett)?
    • Ich vermute, print geht nur mit Variablen. Versuche mal dim a as byte
      do
      a=pina.1
      print a
      loop

      fredred wrote:

      enauso muss es funktionieren.

      Was noch möglich ist der Pullup ist zu groß.

      Für test würde ich den int. Pullup aktivieren

      Pina.1 =1

      Port A ist bedingt durch ADC- Betrieb sehr Hochohmig. Somit auch empfindlicher als die anderen.


      Mit Printausgabe sollte der Uartinhalt immer aktuell sei., dies war für mich erst mal die beste Info, was zu beachten ist. Muss doch erst mal zuverlässige Messdaten haben bevor es auf Fehlersuche geht. Somit hat sich auch seine Frage von selbst beantwortet“ wenn ich Vcc am Eingang lege sollte doch eine 1 am Ausgang erscheine. So ist es, müssen aber erst mal sorgfältig alle Bedingungen geschaffen werden. Wenn gewollt kann Vcc auch mal eine 0sein. Was aber in der Digitaltechnik immer vorab vereinbart werden muss.

      Nun wird es seltsam er schaltet das Port A auf analog A0 bis A7 werden gelesen und digtaliesiert und Hura.

      Nein da kann nur ein HW- Fehler sein.