- 12V Akku mit 280 Ah bauen         
Seite 2 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 11 bis 20 von 35

Thema: NIBOBee mit BASCOM Programmieren

  1. #11
    Erfahrener Benutzer Roboter Genie Avatar von pinsel120866
    Registriert seit
    18.12.2007
    Ort
    Hohenems
    Alter
    58
    Beiträge
    847
    Anzeige

    Praxistest und DIY Projekte
    OK, danke.

    Offensichtlich habe ich ein Brett vorm Kopf.

    Fassen wir mal zusammen:

    - Der IC, der für die Motorbrücken zuständig ist, ist ein 74HC139.
    - Das Drehrichtungssignal vom rechten Motor kommt vom PIN PD7 (Atmega16 DIR_R) und geht in den PIN2 des 74HC139.
    - dort wird das Signal aufgeteilt in PIN4 (Y0 Uhrzeigersinn) und in PIN6 (Y2 Gegen Uhrzeiger)

    Soweit, sogut. Nur wie mache ich das in BASCOM???

  2. #12
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.694
    Zitat Zitat von pinsel120866
    ... wie mache ich das in Bascom ...
    Ohhh - to bee or not to bee - sorry - to left or not to left, that´s the question

    Anmerkung: meine Ratschläge zu Bascom sind rein zufällig. Jede Verwandtschaft oder Ähnlichkeit mit funktionierenden Codestücken ebenso wie die Funktionstüchtigkeit meiner realisierten Vorschläge sind rein zufällig und nicht gewollt.
    Ciao sagt der JoeamBerg

  3. #13
    Erfahrener Benutzer Roboter Genie Avatar von pinsel120866
    Registriert seit
    18.12.2007
    Ort
    Hohenems
    Alter
    58
    Beiträge
    847
    Noch ein paar BSACOM Programme:

    1. Ein kleines Lauflicht der 4 LEDs:
    Code:
    'Verwendeter Compiler Bascom V 1.11.9.3
    '
    'Aufgabe:
    'Lauflicht mit den 4 LEDs
    'Autor: Pinsel120866
    '###################################################
    
    Declare Sub Lauflicht()
    
    $regfile = "m16def.dat"
    $crystal = 15000000
    $baud = 9600
    $hwstack = 32
    $framesize = 32
    $swstack = 32
    
    Dim I As Integer
    Dim N As Integer
    
    Wait 5
    Print "**** Lauflicht mit NIBOBee *****"
    Print " "
    
    Do
                Call Lauflicht
                Waitms 500
    Loop
    End
    
    Sub Lauflicht()
    
       Config Portb.0 = Output
       Config Portb.1 = Output
       Config Portb.2 = Output
       Config Portb.3 = Output
       For N = 1 To 10
          For I = 0 To 3
             Portb.i = 1
             Waitms 500
             Portb.i = 0
          Next I
       Next N
       Config Portb = Input
    End Sub
    2. Batteriespannung über die serielle Schnittstelle ausgeben:
    Code:
    'Verwendeter Compiler Bascom V 1.11.9.3
    '
    'Aufgabe:
    'Batteriespannung über RS232 anzeigen
    'Autor: Pinsel120866
    '###################################################
    
    Declare Sub Batteriespannung()
    
    $regfile = "m16def.dat"
    $crystal = 15000000
    $baud = 9600
    $hwstack = 32
    $framesize = 32
    $swstack = 32
    
    Const Ref = 5 / 1023                                        'Für Batteriespannungsberechnung
    Dim Volt As Single
    
    Wait 5
    Print " "
    Print "**** Batteriespannung NIBOBee *****"
    Print " "
    
    Do
                Call Batteriespannung
                Wait 1
    Loop
    End
    
    Sub Batteriespannung()
    Local W As Word
       Start Adc
       W = Getadc(6)
       Volt = W * Ref
       Print "Die aktuelle Spannung: " ; Volt ; " Volt"
    
    End Sub
    3. Werte der Linien-/Bodensensoren über die serielle Schnittstelle ausgeben:
    Code:
    'Verwendeter Compiler Bascom V 1.11.9.3
    '
    'Aufgabe:
    'Werte der Linien-/Bodensensoren ausgeben
    'Autor: Pinsel120866
    '###################################################
    
    $regfile = "m16def.dat"
    $crystal = 15000000
    $baud = 9600
    $hwstack = 32
    $framesize = 32
    $swstack = 32
    
    Declare Sub Linedata()
    
    Dim Linesensl As Integer
    Dim Linesensc As Integer
    Dim Linesensr As Integer
    
    Config Adc = Single , Prescaler = Auto , Reference = Internal
    Start Adc
    
    Wait 5
    Print " "
    Print "**** Liniensensorgruppe NIBOBee *****"
    Print " "
    
    Do
    Call Linedata
    Print "Rechts " ; Linesensr ; " Mitte " ; Linesensc ; " Links " ; Linesensl
    Wait 1
    Loop
    
    End
    
    Sub Linedata()
       Config Portb.4 = Output
       Portb.4 = 1
       Linesensl = Getadc(5)
       Linesensc = Getadc(6)
       Linesensr = Getadc(7)
       Portb.4 = 0
    End Sub
    Was den Antrieb angeht, bin ich leider noch keinen Schritt weiter.

    Ich wende mich nun der Frage zu: "Two Bee(r)s or not two bee(r)s, that's the question!"

  4. #14
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    "oberallgeier" hat da den Schaltplan hereingestellt, da ist mir auf der Seite mit dem Tiny44 am Taster S1 aufgefallen, VCC an der Wurzel und GND auf der Arbeitsseite, kann nur ein Scherz sein, oder?
    Hat zwar nichts mit Bascom zu tun, aber auch wichtig.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  5. #15
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.694
    Zitat Zitat von pinsel120866
    ... Two Bee(r)s or not two bee(r)s, that's the question ...
    Machs easy, machs mit Musik, "Take five" . . . meinte (bzw. jazzte) Dave B. schon vor Jahrzehnten.

    Zitat Zitat von Hubert.G
    "oberallgeier" hat da den Schaltplan hereingestellt ... Taster S1 aufgefallen ... Scherz ... ? ...
    Oh! Ich beneide Dich um Deine Augen (na ja, eigentlich um Deine Erfahrung). Muss ich mir mal ansehen und durchdenken.
    Ciao sagt der JoeamBerg

  6. #16
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    Die Motorsteuerung ist recht trickreich. Ein High auf dem jeweiligen PWM-Eingang des 74139 erzeugt an den Ausgängen y0 und y2 je ein High und sperrt damit die H-Brücke. Deshalb sind die Sicherheitswiderstände R10 und R11 (je 4k7) auch als PullUp gegen Vcc ausgeführt. Man muss also das PWM-Signal mit einem Low starten (Motor dreht) und beim Compare auf High schalten (Motor steht). Ich weiß noch nicht, ob dein Setup das kann, aber ich bin noch dran:
    Code:
    Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 1
    Noch ein Aspekt ist die PWM-Frequenz. Bei 8Bit-PWM wäre sie bei Prescaler=1 so um die 58kHz (15000000/256=58593,75). Das ergibt vermutlich große Umschaltverluste. Mit Prescaler=8 wären es nur etwas über 7kHz, das wäre zu Kontrollzwecken sogar hörbar.

    Ich könnte auch falsch liegen, denn ich bin PWM-Neuling :)

    Das Drehrichtungsproblem wird tatsächlich vom Ansteuerungs-IC der H-Brücke verursacht.
    Das stimmt so eigentlich nicht. Die beiden Seiten sind schon richtig angeschlossen, allerdings wurde wohl nicht berücksichtigt, dass die Motoren um 180° zueinander gedreht sind...

    Gruß

    mic
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  7. #17
    Erfahrener Benutzer Roboter Genie Avatar von pinsel120866
    Registriert seit
    18.12.2007
    Ort
    Hohenems
    Alter
    58
    Beiträge
    847
    Hallo,

    nochmals der Appell an die RN-Gemeinde:

    Hat schon jemand eine Motorbrücke mit 2vorgeschalteten ICs mit der Bezeichnung "74HC139N" unter Bascom programmiert?

    Wenn ja, bitte um Erklärung/Hilfe/Beispielcode.

    BitteDanke

  8. #18
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    Als Bascomlaie habe ich mal ein Grundgerüst angefangen:
    Code:
    ' nibobee mit Bascom                                                  9.12.09 mic'
    
    ' Achtung! Nach einer kurzen Verzögerung starten die Motoren!
    
    $regfile = "m16def.dat"
    
    $crystal = 15000000
    
    $baud = 9600
    
    Config Portb.0 = Output                                     ' LEDs 0-3
    Config Portb.1 = Output
    Config Portb.2 = Output
    Config Portb.3 = Output
    
    Config Portd.4 = Output                                     ' pmw_r
    Config Portd.5 = Output                                     ' pwm_l
    Config Portd.6 = Output                                     ' dir_l
    Config Portd.7 = Output                                     ' dir_r
    
    Declare Sub Motorpwm(byval Pwm_l As Byte , Byval Pwm_r As Byte)
    Declare Sub Motordir(byval Dir_l As Byte , Byval Dir_r As Byte)
    Declare Sub Setleds(byval Leds As Byte)
    
    
    Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 1
    
    Call Setleds(1)
    Wait 3
    
    Do
       Call Setleds(9)
       Call Motordir(1 , 1)
       Call Motorpwm(127 , 127)
       Wait 2
       Call Motorpwm(255 , 255)
       Wait 1
       Call Motorpwm(127 , 127)
       Wait 2
       Call Motorpwm(0 , 0)
       Wait 1
    
       Call Setleds(6)
       Call Motordir(0 , 0)
       Call Motorpwm(127 , 127)
       Wait 2
       Call Motorpwm(255 , 255)
       Wait 1
       Call Motorpwm(127 , 127)
       Wait 2
       Call Motorpwm(0 , 0)
       Wait 1
    Loop
    
    End
    
    Sub Motorpwm(byval Pwm_l As Byte , Byval Pwm_r As Byte)
       Pwm1a = Pwm_l * 4
       Pwm1b = Pwm_r * 4
    End Sub
    
    Sub Motordir(byval Dir_l As Byte , Byval Dir_r As Byte)
       If Dir_l = 0 Then Portd.6 = 0 Else Portd.6 = 1
       If Dir_r = 0 Then Portb.7 = 1 Else Portb.7 = 0
    End Sub
    
    Sub Setleds(byval Leds As Byte)
          If Leds.0 = 1 Then Portb.0 = 1 Else Portb.0 = 0
          If Leds.1 = 1 Then Portb.1 = 1 Else Portb.1 = 0
          If Leds.2 = 1 Then Portb.2 = 1 Else Portb.2 = 0
          If Leds.3 = 1 Then Portb.3 = 1 Else Portb.3 = 0
    End Sub
    Ich verwende 10-bit-PWM, die Funktion Motorpwm() erwartet aber Werte zwischen 0 und 255. Diese werden dann mit 4 multpliziert in die 10-bit Timerregister geschrieben (nicht atomar!).

    Im Parameter für Setleds() ist den Bits 0 bis 3 jeweils die entsprechende Led zugeordnet.

    Code:
    Sub Linedata()
       Config Portb.4 = Output
       Portb.4 = 0
       Linesensl = Getadc(5)
       Linesensc = Getadc(6)
       Linesensr = Getadc(7)
       Portb.4 = 1
    End Sub
    Die LineLEDs IR3 und IR4 hängen zwischen Vcc und PB4 (LINE_EN). Deshalb schaltet ein Low die Leds an und ein High wieder aus!

    Gruß

    mic
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  9. #19
    Erfahrener Benutzer Roboter Genie Avatar von pinsel120866
    Registriert seit
    18.12.2007
    Ort
    Hohenems
    Alter
    58
    Beiträge
    847
    WOW!

    Also mic, ich bin echt begeistert wie souverän du die Sache angepackt und gelöst hast. Vielen, vielen Dank für deine Hilfe!

    Ich habe den Code analysiert und bin echt fasziniert - du hast die Nuss geknackt, gratuliere!

    \/ Bravissimo!

  10. #20
    Erfahrener Benutzer Roboter Genie Avatar von pinsel120866
    Registriert seit
    18.12.2007
    Ort
    Hohenems
    Alter
    58
    Beiträge
    847
    Und weiter geht's,

    das 3x16 Zeichen Display mit Portexpander PCF8574 will auch noch seinen Bascom Code:
    Code:
    $regfile = "m16def.dat"
    $crystal = 15000000
    $baud = 9600
    
    $lib "Lcd_i2c.lib"                                          'I2c driver for the LCD
    Config I2cdelay = 1
    Const Pcf8574_lcd = &H4E                                    'Defines the address of the I/O expander for LCD
    Config Scl = Portc.0                                        'Configure I2C SCL
    Config Sda = Portc.1                                        'Configure I2C SDA
    
    Dim _lcd_e As Byte                                          'Needed to control 4 line LCD
    Enable Interrupts
    
    Config Lcd = 16 * 3                                         'configure lcd screen
    
    I2cstart
    
    _lcd_e = 128                                                'Upper half of 4-line display is selected
    Cls                                                         'clear the LCD display
    Lcd "Hello world."                                          'display this at the top line
    Wait 1
    Lowerline                                                   'select the lower line
    Wait 1
    Lcd "Line 2"                                                'display this at the lower line
    Wait 1
    _lcd_e = 64                                                 'Lower half of 4-line display is selected
    Lcd "Line 3"
    Das Blöde ist nur - es wird am Display nichts angezeigt. Kann mir jemand sagen, why???

Seite 2 von 4 ErsteErste 1234 LetzteLetzte

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress