- 12V Akku mit 280 Ah bauen         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 29

Thema: RNFRA+Sensor+Schrittmotor

  1. #11
    Benutzer Stammmitglied
    Registriert seit
    23.05.2011
    Beiträge
    55
    Anzeige

    E-Bike
    ja hatte es in einem anderen thread gelesen nachdem ich die frage gepostet habe aner trotzdem danke
    hatte vergessen dass $regfile "m32def.dat" einzugeben
    MfG
    DarkSoldier

  2. #12
    Benutzer Stammmitglied
    Registriert seit
    23.05.2011
    Beiträge
    55
    @Richard die Datein gibts im Netz zum download:http://www.shop.robotikhardware.de/s...products_id=12
    hätte dann noch eine Frage: Ich habe oben beschrieben wie ich meinen roboter programmieren will. Dazu habe ich jetzt ein Programm geschrieben nur, weiß ich nicht ob dass funktioniert wie ich mir das Vorstelle. Als ich es ausprobieren wollte, kam mal wieder eine Fehlermeldung. Deswegen würde ich jemanden der mit Bascom erfahrung hat bitten, dies zu kontrollieren und zu sagen was falsch ist . Das ist eins der ersten Programme die ich selber geschrieben habe, deswegen bitte ich euch nicht auf die "äußere Form " zu achten.
    Wäre nett wenn ihr mir weiter helfen könntet, mal wieder
    MfG
    Danke im Vorraus DarkSoldier






    $regfile "m32def.dat"
    Declare Sub Ledein
    Declare Sub Ledaus
    Const Writepowerport_adr = &H72
    Const Readpowerport_adr = &H73
    Dim I2cdaten As Byte
    Dim I As Word
    $crystal = 8000000
    Config Scl = Portc.0
    Config Sda = Portc.1
    I2cinit
    I2cstart
    I2cwbyte &H74
    I2cwbyte &B00000010
    I2cstop
    Config Pind.6 = Output
    Portd.6 = 1

    Config Pinc.5 = Output
    Portc.5 = 0
    Config Pind.6 = Output
    Portd.6 = 1
    Elseif
    I2cstart
    I2cwbyte Writepowerport_adr
    I2cwbyte 15
    I2cstop
    Then
    Config Pind.6 = Output
    Portd.6 = 0
    Config Pinc.4 = Output
    Portc.4 = 0
    Config Pinc.5 = Output
    Portc.5 = 1
    Config Pinc.3 = Output
    Do
    Portc.2 = 0
    Waitms 5
    Portc.2 = 1
    Waitms 5
    Loop Until I < 1
    Config Pind.6 = Output
    Portd.6 = 1

  3. #13
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Das ist eins der ersten Programme die ich selber geschrieben habe, deswegen bitte ich euch nicht auf die "äußere Form " zu achten.
    Du solltest gleich von Beginn an eine gewisse Ordnung in deine Programme bringen. Programmkopf mit Kompileranweisungen, Definitionen, Variablen, Funktionen, Configs und dann die Hauptschleife. Nicht nur wir können dann besser nachvollziehen, was das Programm bewirken soll. Da ich normalerweise in C programmiere kann ich als Beispiel nur ein Programm präsentieren, das ich noch auf meiner Festplatte gefunden habe:

    Code:
    $regfile = "M168Pdef.dat"                                   'es handelt sich um einen ATmega168P
    $crystal = 3686400                                          'der eingebauter RC-Oszillator läuft mit 3,6864 Mhz
    $hwstack = 60                                               'im Speicher werden für den Hardware-Stack 60 Byte reserviert
    $swstack = 60                                               'im Speicher werden für den Software-Stack 60 Byte reserviert
    $framesize = 80                                             'im Speicher werden für den Frame 80 Byte reserviert
    $baud = 19200
    
    
    
    
    'IR Sensor
    Dim Ir As Word
    
    'Motoren
    Dim Mrechts As Byte , Mlinks As Byte
    
    'Servostellung
    Dim Servo1 As Byte , X30 As Bit , X40 As Bit , X50 As Bit , X60 As Bit , X70 As Bit , X80 As Bit
    
    
    'Input für Taster
    S1 Alias Pind.2
    Smi Alias Pinc.1
    
    'Taster
    Config S1 = Input
    Config Smi = Input
    
    'PullUp-Widerstand einschalten
    S1 = 1
    Smi = 1
    
    
    'Submenüs Declarieren
    Declare Sub Vor
    Declare Sub Stopp
    Declare Sub Denken
    Declare Sub Zurück
    Declare Sub Weniglinks
    Declare Sub Links
    Declare Sub Wenigrechts
    Declare Sub Rechts
    Declare Sub Sehen
    
    'PWM Modulieren
    Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 8
    
    'Motoren 0 = Vollgas
    Mrechts = 0
    Mlinks = 0
    
    
    'Output für PWM
    Config Portb.1 = Output
    Config Portb.2 = Output
    
    
    'Motoren
    M1vor Alias Portd.4
    M1zur Alias Portd.5
    M2vor Alias Portd.6
    M2zur Alias Portd.7
    
    Config M1vor = Output
    Config M1zur = Output
    Config M2vor = Output
    Config M2zur = Output
    
    
    
    'IR Sensor 300 ca 20 cm, 500 ca 10 cm
    'Config für Ir Augen
    Config Adc = Single , Prescaler = Auto , Reference = Avcc
    
    Start Adc
    
    
    'Servo Settings
    'Servo von 20 - 106 (Verwendet 30-80)
    Config Servos = 1 , Servo1 = Portd.3 , Reload = 10
    Config Portd.3 = Output
    
    Enable Interrupts
    
    'Servo in Mittelstellung
    Servo(1) = 54
    
    
    
    'S1 schaltet Robi ein
    Bitwait S1 , Reset
    Bitwait S1 , Set
    
    Wait 1
    
    
    'Hauptschleife Go
    Haupt:
    
    Do
    
       Print "Hauptschleife"
    
      'Mitte  Ca. 54 , 30 Links, 80 Rechts
    
       Servo(1) = 35
    
       Call Sehen
       Call Sehen
       Call Sehen
       Call Sehen
    
       Servo(1) = 75
    
       Call Sehen
       Call Sehen
       Call Sehen
       Call Sehen
    
       Call Vor
    
    Loop
    
    
    
    End                                                         'end program
    
    
    
    Sub Denken
    
       Print "Denken"
    
       'Stopp
       M1vor = 0
       M2vor = 0
       M1zur = 0
       M2zur = 0
    
    
       Waitms 100
       Servo1 = 30
       Servo(1) = Servo1
    
       X30 = 0
       X40 = 0
       X50 = 0
       X60 = 0
       X70 = 0
       X80 = 0
    
       Waitms 300
    
       Do
    
          If Smi = 0 Then Call Zurück
          Servo(1) = Servo1
          Waitms 50
          Ir = Getadc(0)
          If Servo1 = 30 And Ir > 210 Then X30 = 1
          If Servo1 = 35 And Ir > 210 Then X30 = 1
          If Servo1 = 40 And Ir > 210 Then X40 = 1
          If Servo1 = 45 And Ir > 210 Then X40 = 1
          If Servo1 = 50 And Ir > 210 Then X50 = 1
          If Servo1 = 55 And Ir > 210 Then X50 = 1
          If Servo1 = 60 And Ir > 210 Then X60 = 1
          If Servo1 = 65 And Ir > 210 Then X60 = 1
          If Servo1 = 70 And Ir > 210 Then X70 = 1
          If Servo1 = 75 And Ir > 210 Then X70 = 1
          If Servo1 = 80 And Ir > 210 Then X80 = 1
    
          Print "Servopos.: " ; Servo1 ; "  Ir: " ; Ir
    
          Servo1 = Servo1 + 5
    
       Loop Until Servo1 > 80
    
    
    
       If X30 = 1 And X40 = 0 And X50 = 0 And X60 = 0 And X70 = 0 And X80 = 0 Then Call Wenigrechts
       If X30 = 0 And X40 = 0 And X50 = 0 And X60 = 0 And X70 = 0 And X80 = 1 Then Call Weniglinks
    
       If X30 = 1 And X40 = 1 And X50 = 0 And X60 = 0 And X70 = 0 And X80 = 0 Then Call Rechts
       If X30 = 1 And X40 = 1 And X50 = 0 And X60 = 0 And X70 = 0 And X80 = 0 Then Call Rechts
       If X30 = 1 And X40 = 1 And X50 = 1 And X60 = 0 And X70 = 0 And X80 = 0 Then Call Rechts
    
       If X30 = 0 And X40 = 0 And X50 = 0 And X60 = 0 And X70 = 1 And X80 = 1 Then Call Links
       If X30 = 0 And X40 = 0 And X50 = 0 And X60 = 0 And X70 = 1 And X80 = 1 Then Call Links
       If X30 = 0 And X40 = 0 And X50 = 0 And X60 = 1 And X70 = 1 And X80 = 1 Then Call Links
    
       If X50 = 1 And X60 = 1 Then Call Zurück
       If X40 = 1 And X70 = 1 Then Call Zurück
    
       Call Vor
    
    End Sub
    
    
    
    
    
    Sub Stopp
    
       Print "Stopp"
    
       'Stopp
       M1vor = 0
       M2vor = 0
       M1zur = 0
       M2zur = 0
    
       Goto Denken
    
    End Sub
    
    
    Sub Vor
    
       Print "Vor"
    
       Pwm1a = Mrechts
       Pwm1b = Mlinks
    
       'Vorwärts fahren
       M1vor = 1
       M2vor = 1
       M1zur = 0
       M2zur = 0
    
       Goto Haupt
    
    End Sub
    
    
    Sub Weniglinks
    
       Print "Weniglinks"
    
       M1vor = 0
       M2vor = 0
       M1zur = 1
       M2zur = 0
    
       Waitms 100
    
       Call Stopp
    
    End Sub
    
    
    Sub Links
    
       Print "Links"
    
       M1vor = 0
       M2vor = 0
       M1zur = 1
       M2zur = 0
    
       Waitms 200
    
       Call Stopp
    
    End Sub
    
    
    Sub Wenigrechts
    
       Print "Wenigrechts"
    
       M1vor = 0
       M2vor = 0
       M1zur = 0
       M2zur = 1
    
       Waitms 100
    
       Call Stopp
    
    End Sub
    
    
    
    Sub Rechts
    
       Print "Rechts"
    
       M1vor = 0
       M2vor = 0
       M1zur = 0
       M2zur = 1
    
       Waitms 200
    
       Call Stopp
    
    End Sub
    
    
    
    
    Sub Zurück
    
        Print "Zurück"
    
        'Zurück
        M1vor = 0
        M2vor = 0
        M1zur = 1
        M2zur = 1
    
        Waitms 250
    
        If Ir > 256 Then Call Links
        If Ir < 257 Then Call Rechts
    
    End Sub
    
    
    Sub Sehen
    
       If Smi = 0 Then Call Zurück
       If S1 = 0 Then Mrechts = Mrechts + 2
    
       Ir = Getadc(0)
       Print "Servo: " ; Servo(1) ; "  Ir: " ; Ir
       If Ir > 230 Then Call Stopp
       Waitms 50
    
    End Sub
    Keine Ahnung, um was es dabei ging. Es soll nur zeigen, wie hübsch ein struckturierter Programmaufbau aussieht.

    Gruß

    mic

    Edit:

    Ich habe mal versucht dein Programm zu ordnen:

    Code:
    $regfile "m32def.dat"
    $crystal = 8000000
    
    Const Writepowerport_adr = &H72
    Const Readpowerport_adr = &H73
    
    Dim I2cdaten As Byte
    Dim I As Word
    
    Config Scl = Portc.0
    Config Sda = Portc.1
    
    Config Pinc.3 = Output
    Config Pinc.4 = Output
    Config Pinc.5 = Output
    Config Pind.6 = Output
    
    Declare Sub Ledein
    Declare Sub Ledaus
    
    I2cinit
    I2cstart
    I2cwbyte &H74
    I2cwbyte &B00000010
    I2cstop
    Portd.6 = 1
    Portc.5 = 0
    Portd.6 = 1
    
    Elseif
    
    I2cstart
    I2cwbyte Writepowerport_adr
    I2cwbyte 15
    I2cstop
    
    Then
    Portd.6 = 0
    Portc.4 = 0
    Portc.5 = 1
    
    Do
    Portc.2 = 0
    Waitms 5
    Portc.2 = 1
    Waitms 5
    
    Loop Until I < 1
    Portd.6 = 1
    Irgendwie wird's dadurch aber auch nicht besser. Vielleicht solltest du dir mal ein Bascom-Tutorial durchlesen.
    Geändert von radbruch (19.06.2011 um 16:44 Uhr) Grund: Edit angefügt
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  4. #14
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.01.2006
    Beiträge
    4.555
    Das ist kein Programm, wo sind die Sub Routinen und wo werden sie aufgerufen/beendet?
    Ein Elseif oder auch ein Then alleine in einer Zeile ergibt keinen Sinn...und bitte Programmzeilen/Beispiele in Code Tags
    (
    Code:
    )
    Programm
    (
    )
    Einsperren.

    Gruß Richard

  5. #15
    Benutzer Stammmitglied
    Registriert seit
    23.05.2011
    Beiträge
    55
    kann mir jemand von euch sagen, wie mann eine wenn, dann Beziehung schreibt wäre echt nett.
    danke an Richard und radbruch die versucht haben aus meinem blödsinn noch was gescheids zu machen.
    mfg
    DarkSoldier

  6. #16
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.01.2006
    Beiträge
    4.555
    Code:
    if x = 1 then gosub...............'gehe zu subroutine LED EIN
    else Gosub ...........................'gehe zu subroutine LED AUS
    Bascom Hilfe IF,Then,else, gosub, Call, return ...für jeden Befehl gibt es kleine leicht zu verstehende Beispiele, die solltest (MUSST) Du leider abarbeiten und ausprobieren. Da geht KEIN Weg an vorbei!!!!!! Genau genommen sollte man ALLE Befehle aus der Hilfe so nach und nach durch probieren um die Möglichkeiten von Bascom zu erlernen. Mühsam ernährt sich das Eichhörnchen....oder es verhungert,stirbt aus.

    Gruß Richard

  7. #17
    Benutzer Stammmitglied
    Registriert seit
    23.05.2011
    Beiträge
    55
    gibts des ganze auch auf deutsch? wenn net is auch egal

  8. #18
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.703
    Blog-Einträge
    133
    gibts des ganze auch auf deutsch?
    Hier ist 'ne Seite auf deutsch, die ich sehr hilfreich finde.

    http://halvar.at/elektronik/kleiner_bascom_avr_kurs/

    Gruß
    Searcher
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  9. #19
    Benutzer Stammmitglied
    Registriert seit
    23.05.2011
    Beiträge
    55
    Danke werde mir diese seite mal zu gemüte führen baue grad an meinem Robotergehäuse und dann les ichs
    Danke
    mfg Dark

  10. #20
    Benutzer Stammmitglied
    Registriert seit
    23.05.2011
    Beiträge
    55
    Nachdem mir radbruch das ganze programm schon einmal formatiert hat poste ich es jetzt da mir noch eine Frage aufgekommen ist:
    Nach dem Unterprogramm besteht Bascom darauf, dass man noch ein loop hinzufügt. Aber soweit ich weiß hat man dann eine schleife. Deshalb ist meine Frage: Wie muss man das programmieren dass er nach einmaligen durchlauf wieder zurück zum hauptprogramm springt?
    PS Dass noch nichts im Hauptprogramm steht weiß ich
    $regfile = "M32def.dat"
    $crystal = 8000000

    ' Interruptserviceroutinen(ISR) Zuordnen
    On Int0 Unterprogramm1
    On Int1 Unterprogramm1
    On Int2 Unterprogramm1

    ' erst enablen wenn alle Interrupteinstellungen erledigt sind
    Enable Interrupts

    ' es reicht die funktionen der Pins einmalig festzulegen
    Config Pinc.3 = Output
    Config Pinc.4 = Output
    Config Pinc.5 = Output
    Config Pind.6 = Output

    Portc.3 = 0
    Portc.4 = 1
    Portc.5 = 0
    Portd.6 = 1 'Portd?

    ' Hauptschleife
    Do

    Loop

    ' Programmende
    End


    ' ISR
    Unterprogramm1:

    Portc.4 = 0
    Portc.5 = 1
    Portd.6 = 0

    Wait 2

    Portd.6 = 1

    Wait 2

    Portd.6 = 0

    Do

    Waitms 5
    Portc.3 = 1
    Waitms 5
    Portc.3 = 1
    Loop

    Return


    Danke im Vorraus
    MfG Dark

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Ähnliche Themen

  1. Antworten: 2
    Letzter Beitrag: 25.04.2006, 09:35
  2. RNFRA Board und Schrittmotor
    Von burkione im Forum Elektronik
    Antworten: 2
    Letzter Beitrag: 05.01.2006, 13:47
  3. Antworten: 0
    Letzter Beitrag: 03.01.2006, 20:35
  4. RNFRA Board mit C-Control
    Von jagdfalke im Forum Controller- und Roboterboards von Conrad.de
    Antworten: 2
    Letzter Beitrag: 10.03.2005, 15:51
  5. Schrittmotor als Sensor
    Von sonic im Forum Sensoren / Sensorik
    Antworten: 37
    Letzter Beitrag: 08.07.2004, 10:33

Stichworte

Berechtigungen

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

Labornetzteil AliExpress