-         
Ergebnis 1 bis 6 von 6

Thema: RN-Control: Port A Pins vertauscht?!

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    17.12.2004
    Ort
    /dev/urandom
    Beiträge
    129

    RN-Control: Port A Pins vertauscht?!

    Anzeige

    Guten Tag!

    Ich experimentiere zur Zeit bissl mit meinem RN-Control 1.4 rum. Ich habe einen Taster zwischen PortA.1 und Masse geklemmt und den PortA.1 auf High gesetzt. Wenn ich jetzt drücke wird die Spannung an diesem Pin runter gezogen, was ich natürlich messen kann...

    Das Problem ist jetzt folgendes: Wenn ich den Taster abfrage geht das so nicht. Wenn ich ihn allerdings mit selbem Code an PortA.3 anschließe gehts!!! Aber im Basic Code steht nirgends was von dem Pin 3.

    Warum ist das so? Hier der Code:
    Code:
    $crystal = 16000000
    $baud = 9600
    $regfile = "m32def.dat"
    
    Declare Sub Fahren()
    Declare Sub Halt()
    
    
    
    
    Config Adc = Single , Prescaler = Auto                      'Für Tastenabfrage und Spannungsmessung
    
    
    Config Pina.7 = Input                                       'Für Tastenabfrage
    Porta.7 = 1                                                 'Pullup Widerstand ein
    
    Config Pina.1 = Input                                       'Für Sensorabfrage
    Porta.7 = 1
    
    Config Portc = Output
    Config Portb = Output
    
    
    Dim Taster As Word
    
    
    Ddrc = &B00000001                                           'Zu Beginn eine LED an
    
    Do
    
    
       Start Adc
       Taster = Getadc(7)
    
    
       If Taster < 1010 Then
    
          Select Case Taster
    
             Case 410 To 450                                    'Taste 1: Fahren bis Hindernis
    
                'Call Lcd()
    
    
             Case 340 To 380                                    'Taste 2:
    
                Call Fahren()
    
             'Case 265 To 305                                    'Taste 3:
    
    
    
             'Case 180 To 220                                    'Taste 4:
    
    
    
             Case 80 To 150                                     'Taste 5: Halten!
    
                Call Halt()
    
    
    
          End Select
    
       End If
    
    Loop
    
    End
    
    '#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#
    
    Sub Fahren()
       Dim Sensor As Word
    
       Config Pina.1 = Input                                    'Port als Input
       Porta.1 = 1                                              'Port hoch setzen
    
       Sensor = Getadc(1)                                       'Sensor 1 aktivieren
    
    
    
    
       Portc.7 = 1                                              'Motor 1 Vorwärts
       Portb.1 = 1                                              'Motor 2 Vorwärts
    
       Do                                                       'Endlosschleife
             If Sensor < 1010 Then                              'Wenn Port runter gesetzt wird (Low)
    
    
                         Portc.6 = 1                            'Motor 1 Rückwärts
                         Portc.7 = 0
    
                         Portb.0 = 1                            'Motor 2 Rückwärts
                         Portb.1 = 0
    
                         Print "Hindernis, setze zurueck!"
    
                         Waitms 100
    
                         'Rechtsdrehung
                         Portc.7 = 1                            'Motor 1 Vorwärts
                         Portc.6 = 0
    
                         Waitms 50
    
                         'Geradeaus
                         Portb.1 = 1                            'Motor 2 Vorwärts
                         Portb.0 = 0
    
    
                         Print "Setze Fahrt fort!"
    
             End If
       Loop
    
    End Sub
    
    
    '#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#
    
    Sub Halt()
    
       Stop Sub Fahren()
    
       Portc = 0                                                'Motor 1 Stop
       Portb = 0                                                'Motor 2 Stop
    
       Sound Portd.7 , 100 , 200                                'BEEP
    
    End Sub
    
    
    '#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#
    Vielen Dank schonmal im Voraus und noch ein schönes WE!



    PS: Direkt noch eine 2. Frage: Ich habe einen Pollin US Sensor. Kann ich die LED Spannung einfach an einen Pin von Port A hängen? Eigentlich nicht, da ich dann ja zwischen Masse und dem LED-Bein Messe, was dann den bereich des Einganes übersteigt. Sehe ich richtig, oder? Besser mit Spannungsteiler oder Optokoppler arbeiten?
    Hilfe, wo ist die Anykey-Taste?

    <- Projekt Agrobot ->

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    02.02.2005
    Beiträge
    14
    Hallo Toastbrot,

    ich blicke zwar bei deinem Programm nicht so richtig durch, ich glaube aber du hast noch Fehler drin.

    Die Zeilen

    Config Pina.1 = Input 'Für Sensorabfrage
    Porta.7 = 1

    sollen doch sicher so lauten

    Config Pina.1 = Input 'Für Sensorabfrage
    Porta.1 = 1

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    17.12.2004
    Ort
    /dev/urandom
    Beiträge
    129
    Da hast du recht, allerdings ist das weiter unten sowieso dann nochmal richtig gemacht, eigentlich doppelt gemoppelt... Habe das geändert, aber es funzt noch nicht so wie es soll.
    Hilfe, wo ist die Anykey-Taste?

    <- Projekt Agrobot ->

  4. #4
    Administrator Robotik Visionär Avatar von Frank
    Registriert seit
    30.10.2003
    Beiträge
    5.013
    Blog-Einträge
    1
    Dein Code ist wirklich noch etwas verworren, sowas führt schnell zu Fehlern.
    So hast du beispielsweise in der do Loop Schleife wo du Sensor abfragst garnicht die Abfrage für den AD-Port drin
    Die Abfrage führst du nur einmal kurz davor aus - die müsste aber dann in die do-loop Schleife wenn ich den Code richtig deute.
    Zudem solltest du darauf achten das du Bascom Stack Werte etwas erhöhst (unter Optionen) oder zum Beispiel so im Code:

    $hwstack = 88
    $framesize = 80
    $swstack = 80


    Müssen zwar nicht so hoch sein, aber schadet auch nix solange du Platz hast. Ansonsten kann´s bei Subfunktionen schnell mal zum Überlauf mit seltsamen Folgen kommen.
    Dann denk noch daran das der rechte Port der Steckklemme Port 0 ist, eventuelle verwechselst du 0 oder 1.
    Irgendwo ist da im Code noch der Wurm drinn. Wenn man nicht weiter kommt, hilft es einem in der Rege wenn man den Code soweit abspeckt bis die Problemstellung übersichtlicher bzw eindeutig wird.

    Gruß Frank

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    17.12.2004
    Ort
    /dev/urandom
    Beiträge
    129
    Vielen Dank, Frank!

    Wofür sind die hestack, framesize und swstack Werte? Werde es einfach mal ausprobieren! Die Sache mit Pin 0 bzw. 1 habe ich mir auch überlegt, da aber auf der Platine mit 1 Beschriftet ist, habe ich mich dafür entschieden...fatal

    Schönes Wochenende noch!
    Hilfe, wo ist die Anykey-Taste?

    <- Projekt Agrobot ->

  6. #6
    Gast
    Die 1 ist nur die Klemmenbezeichnung. Auf der Platine steht vorne aber auch PA0!

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •