- LiTime Speicher und Akkus         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 22

Thema: Quelltext Erklärung

  1. #11
    Gast
    Anzeige

    Powerstation Test
    Das gleiche geht glaub ich auch mit Conifg Portx = &b00001111 (0 = Eingang / 1 = Ausgang)

    öhm...RCO... war nicht ein Byte (8Bit)von 0 bis 255 und ein Integer wie ein Word (16 Bit) aber mit zulässigen Wertzuweisungen von
    -30tausendirgentwas bis +30tausendirgentwas?!??!? (und ergäbe nicht -(-30tausendirgentwas) + +30tausendirgendwas zusammen 65534 ?!?)Lass mich nicht verzweifeln. Bin grad ganz schön am grübeln...

  2. #12
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.06.2004
    Ort
    Aachen
    Beiträge
    2.674
    öhm...ja möglich!

  3. #13
    Gast
    Einen guten Einstieg in Bascom gibt es auf der Seite von Roland Walter( http://www.rowalt.de/mc/index.htm). Kann auch sein Buch dazu empfehlen.

    Gruß Jens

  4. #14
    Benutzer Stammmitglied
    Registriert seit
    01.01.2004
    Beiträge
    96
    viele Wege führen nach Rom

    config portX = input / output 'setzen des ganzen Ports
    config portX.Y = input / output 'setzen eines einzelnen Pins
    ddrX = &B00001111 'setzen des Ports

    wenn das Programm leicht zu lesen sein soll, dann würde ich config verwenden; soll das Programm vielleicht nach Assembler übersetzt werden, dann sollte ddrX verwendet werden.

    ein Byte (8 Bit) - 0 bis 255
    ein Integer (16 Bit) - -32768 bis 32767
    ein Word (16 Bit) - 0 bis 65535
    bei Integerzahlen wird das höchstwertige Bit als Vorzeichen verwendet, das ist ansich der ganze Unterschied zum Word

  5. #15
    Gast
    Kleine Korrektur:

    config portX.Y = input / output 'setzen eines einzelnen Pins

    Das funktioniert nur bei Output.
    Wenn eine Leitung als Input fungieren soll, muß man es so definieren:

    config pinX.Y = input

  6. #16
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    17.12.2004
    Ort
    /dev/urandom
    Beiträge
    129
    Das ist ein super Thread, genau das habe ich gesucht! Vielen Dank an alle.

    Das ganze hat jetzt jedoch noch einige Fragen bei mir aufgeworfen! Warum das "Waitms 100" am ende der Schleife, dadurch hat man doch nur unnötige Verzögerung! Bei mir funzt es ohne das Wait eigentlich genauso nur eben schneller. Daraus entsteht jetzt die nächste Frage: wenn ich alle LEDs an/aus schalte, passiert das sofort beim drücken. Wenn ich nur eine anschalten will, muss ich den T1 dafür einige Sek. gedrückt halten, warum?

    So, genug erstmal. Jetzt werd ich mieder Learning by doing und Try & error machen
    Hilfe, wo ist die Anykey-Taste?

    <- Projekt Agrobot ->

  7. #17
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    17.12.2004
    Ort
    /dev/urandom
    Beiträge
    129
    Hallo,
    ich habe einiges Probiert und auch vieles davon früher/später hinbekommen. Jetzt habe ich mir eben mal ein Taster mit 2 Drähtchen zusammen gebastelt, den ich als Test-Sensor erstmal verwenden wollte. Den habe ich an meiner RN-Control zwischen +5V und Port A.2 (also den 3.) geklemmt. Mein ganz simples Motoren Test Progg soll anhalten bzw. den Motor anders herum drehen, sobald dieser Port durch den Taster auf High gesetzt wird.

    Das tut es leider nicht. Programmier-technisch ist das auch noch nicht so schön gelöst, noch ist diese Prüfung in ner While Endlos Schleife, wodurch alle anderen Taster (die oboard) in der Zeit blockiert sind.

    Vllt kann mir ja jemand helfen, hier erstmal der Code:

    Code:
    $crystal = 16000000
    $baud = 9600
    $regfile = "m32def.dat"
    
    
    Config Adc = Single , Prescaler = Auto                      'Für Tastenabfrage und Spannungsmessung
    
    Config Pina.2 = Input                                       'Testsensor
    Config Pina.7 = Input                                       'Für Tastenabfrage
    Porta.7 = 1                                                 'Pullup Widerstand ein
    Porta.2 = 1
    
    Config Portc = Output
    Config Portb = Output
    
    Dim Taster As Word
    Dim Sensor As Word
    Dim I As Integer
    Dim N As Integer
    Dim B As Boolean
    
    Ddrc = &B00000001
    
    Do
    
    
       Start Adc
       Taster = Getadc(7)
       Sensor = Getadc(2)
    
       If Taster < 1010 Then
    
          Select Case Taster
    
             Case 410 To 450                                    'Taste 1: Motor 1 Dreht 1
                   Sound Portd.7 , 100 , 200
                   Ddrc = &B10000000
    
                   Do While Not B                               'Dauernd prüfen
                      If Sensor < 1000 Then
                         Ddrc = &B00000000                      'Wenn Hindernis, dann Rückwärts bzw. aus!
                         Exit Do
                      End If
                   Loop
    
             Case 340 To 380                                    'Taste 2: Motor 1 Dreht 2
                   'Sound Portd.7 , 100 , 400
                   Ddrc = &B01000000
    
             Case 265 To 305                                    'Taste 3: Motor 2 Dreht 1
                   'Sound Portd.7 , 100 , 200
                   Ddrb = &B00000010
    
             Case 180 To 220                                    'Taste 4: Motor 2 Dreht 2
                   'Sound Portd.7 , 100 , 400
                   Ddrb = &B00000001
    
             Case 80 To 150                                     'Taste 5: Motoren Stop 
    'Achtung, das Funzut auch noch nicht ganz, es geht nur der erste Motor aus!!
                   Ddrc = &B00000000                            'Motor 1
                   Ddrb = &B00000000                            'Motor 2
    
    
          End Select
    
       End If
    
    Loop
    
    End
    Danke!
    Hilfe, wo ist die Anykey-Taste?

    <- Projekt Agrobot ->

  8. #18
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.06.2004
    Ort
    Aachen
    Beiträge
    2.674
    Mal ne Frage, wenn du doch den Pullup von A.2 anschaltest un den Taster gegen +5 V schaltest, wo soll da was passieren? Entweder der Taster ist nciht gedrück --> Pullup zieht den Eingang hoch oder Taster ist gedrückt, Taster und Pullup ziehen hoch.

    Schalte den taster gegen GND.

    MFG Moritz

  9. #19
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    17.12.2004
    Ort
    /dev/urandom
    Beiträge
    129
    Erscheint logisch, danke. Hab das gerade mal umgesteckt... Aber auf die Schnelle habe ich keinen Erfolg verzeichnen können. Muss ich dann abfragen ob der Wert näherungsweise 0 oder 1000 und paar zerquetschte ist?
    Hilfe, wo ist die Anykey-Taste?

    <- Projekt Agrobot ->

  10. #20
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    17.12.2004
    Ort
    /dev/urandom
    Beiträge
    129
    N'abend!
    Learning by doing hat sich wieder einmal bewährt! Habe das jetzt hinbekommen und weiß auch woran es lag! Ich habe als Endlosschleife eine For Schleife genutzt die nie Endet. Das mag er anscheind nicht. Mit Do Loop gehts ohne Probleme. Außerdem habe ich die Sache mit den Sub's hinbekommen. Alles eigentlich nicht schwer.

    Hier mein kleines Programm zum Fahren mit 2 Motoren. Wird ein Hinderniss erfasst, wird kurz zurück gesetzt, etwas nach rechts gedreht und weiter gefahren... Ob die Zeiten in der Praxis OK sind kann ich nicht sagen, aber das ist ja egal.

    Was meint ihr, kann man da etwas besser machen? Wie lasst ihr den Bot ausweichen?

    Code:
    Code:
    $crystal = 16000000
    $baud = 9600
    $regfile = "m32def.dat"
    
    Declare Sub Fahren()
    
    
    
    Config Adc = Single , Prescaler = Auto                      'Für Tastenabfrage und Spannungsmessung
    
    
    Config Pina.7 = Input                                       'Für Tastenabfrage
    Porta.7 = 1                                                 'Pullup Widerstand ein
    
    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 Fahren()
    
    
             'Case 340 To 380                                    'Taste 2:
    
    
    
             'Case 265 To 305                                    'Taste 3:
    
    
    
             'Case 180 To 220                                    'Taste 4:
    
    
    
             'Case 80 To 150                                     'Taste 5:
    
    
    
          End Select
    
       End If
    
    Loop
    
    End
    
    '#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#
    
    Sub Fahren()
       Dim Sensor As Word
    
       Sensor = Getadc(2)                                       'Sensor 1 aktivieren
       Config Pina.2 = Input                                    'Port als Input
       Porta.2 = 1                                              'Port hoch setzen
    
    
    
       Ddrc = &B10000000                                        'Motor 1 Vorwärts
       Ddrb = &B00000010                                        'Motor 2 Vorwärts
    
       Do                                                       'Endlosschleife
             If Getadc(2) < 1010 Then                           'Wenn Port runter gesetzt wird (Low)
    
                         Ddrc = &B01000000                      'Motor 1 Rückwärts
                         Ddrb = &B00000001                      'Motor 2 Rückwärts
    
                         Print "Hindernis, setze zurueck!"
    
                         Waitms 100
    
                         'Rechtsdrehung
                         Ddrc = &B10000000                      'Motor 1 Vorwärts
                         Ddrb = &B00000001                      'Motor 2 Rückwärts
    
                         Waitms 50
    
                         'Geradeaus
                         Ddrb = &B00000010                      'Motor 2 Vorwärts
    
                         Print "Setze Fahrt fort!"
    
             End If
       Loop
    
    End Sub
    Hilfe, wo ist die Anykey-Taste?

    <- Projekt Agrobot ->

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Berechtigungen

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

LiTime Speicher und Akkus