- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 4 von 4 ErsteErste ... 234
Ergebnis 31 bis 35 von 35

Thema: NIBOBee mit BASCOM Programmieren

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

    E-Bike
    Hi mic,

    super Video, bei mir verhält die Bee sich genauso. Ich habe ein bisschen herumexperementiert und festegestellt dass man mir der Abschirmung der IR-LEDs einiges herausholen kann.

    Die LCD-Lib habe ich noch angehängt.

  2. #32
    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

    Ändere mal die waitms xxx-Aufrufe in Msleep(xxx) um, dann wird aus den sinnlosen Drehungen echtes Ausweichen.

    Setup Timer2 geändert:
    Config Timer2 = Pwm , Compare Pwm = Disconnect , Prescale = 1 'gemessene 36kHz!

    Zuvor wurden die Impulse wohl nur über die Warteschleifen im Programm erzeugt. Keine Ahnung, warum das funktionierte. Sorry.

    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!

  3. #33
    Erfahrener Benutzer Roboter Genie Avatar von pinsel120866
    Registriert seit
    18.12.2007
    Ort
    Hohenems
    Alter
    58
    Beiträge
    847
    Hi mic,

    du hast Recht, die Bee fährt nun viel besser.

    Nur der Parkettboden ist bei mir zu rutschig, hier muss ich mir noch überlegen wie ich den Reifen mehr Grip geben kann.

    Noch mein angepasster Code:
    Code:
    'Verwendeter Compiler Bascom V 1.11.9.3
    '
    'Aufgabe:
    'Abstandsmessung mit IR-LEDs 2xlinks, 2x rechts
    'und Werte auf DODM 3x16 LCD ausgeben
    'Autor: Pinsel120866
    '###################################################
    
    Declare Sub Motorpwm(byval Pwm_l As Byte , Byval Pwm_r As Byte)       'Pwm für Motoren setzen (0-255)
    Declare Sub Motordir(byval Dir_l As Byte , Byval Dir_r As Byte)       'Drehrichtungen der Motoren setzen (1/0)
    Declare Sub Setleds(byval Leds As Byte)                     'Leds als Bitmuster setzen &B000xxxx
    Declare Function Getkeys() As Byte                          'Bitmuster der Tasten einlesen &B0000xxxx
    Declare Sub Odo_reset                                       ' Odometryzähler auf null setzen
    Declare Sub Sleep(byval Pause As Byte)                      'Pause 1/36000 Sekunde warten
    Declare Sub Msleep(byval Pause As Word)                     'Pause 1/1000 Sekunde warten
    Declare Sub Acs                                             ' acs_left und acs_right aktuallisieren
    
    $regfile = "m16def.dat"
    $crystal = 15000000
    $hwstack = 48                                               ' kleiner 48 ergibt Stapelüberlauf!
    $swstack = 8
    $framesize = 24
    
    $baud = 19200
    
    Acs_led_left Alias Porta.1                                  'acs Anoden
    Acs_led_right Alias Porta.0
    Acs_led_36khz Alias Porta.3                                 ' Kathode mit Widerstand
    Acs_tsop Alias Pina.2                                       'Eingang!
    
    Led0 Alias Portb.0
    Led1 Alias Portb.1
    Led2 Alias Portb.2
    Led3 Alias Portb.3
    Lineled Alias Portb.4
    
    $lib "Lcd_i2c_DOGM.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
    
    Config Led0 = Output                                        ' LEDs 0-3
    Config Led1 = Output
    Config Led2 = Output
    Config Led3 = Output
    Config Lineled = Output                                     ' Lineled
    
    Config Acs_led_left = Output                                'acs
    Config Acs_led_right = Output
    Config Acs_led_36khz = Output
    Config Acs_tsop = Input
    
    Config Portc.4 = Input                                      ' keys
    Config Portc.5 = Input
    Config Portc.6 = Input
    Config Portc.7 = Input
    Portc = &B11110000                                          'Tasten-PullUp Bit 4-7 einschalten
    
    Config Portd.2 = Input                                      ' odo_l int0
    Config Portd.3 = Input                                      ' odo_r int1
    Config Portd.4 = Output                                     ' pmw_r
    Config Portd.5 = Output                                     ' pwm_l
    Config Portd.6 = Output                                     ' dir_l
    Config Portd.7 = Output                                     ' dir_r
    
    'Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
    Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 1
    Config Timer2 = Pwm , Compare Pwm = Disconnect , Prescale = 1       'gemessene 36kHz!
    Ocr2 = 151                                                  '36kHz mit Puls:Pause 50:50
    Tcnt2 = 99                                                  'Frequenzkorrektur beim Start
    Config Adc = Single , Prescaler = 64 , Reference = Avcc     ' 235 kHz
    Config Int0 = Change
    Config Int1 = Change
    
    Dim B As Byte , W As Word
    Dim Odo_count_l As Word , Odo_count_r As Word
    Dim Count36khz As Byte
    Dim Acs_left As Byte , Acs_right As Byte
    Dim Acs_count As Byte
    Dim _lcd_e As Byte                                          'Needed to control 4 line LCD
    
    Config Lcd = 16 * 3 , Chipset = Dogm163v5                   '16*3 type LCD display 5V
    
    I2cstart
    Start Adc
    On Oc2 Isr_timer2_comp
    On Ovf2 Isr_timer2_ovl
    On Int0 Isr_int0
    On Int1 Isr_int1
    Enable Oc2
    Enable Ovf2
    Enable Int0
    Enable Int1
    Enable Interrupts
    
    _lcd_e = 128                                                'Upper half of 4-line display is selected
    Cls                                                         'clear the LCD display
    Lcd "Pinsel's NIBOBee"                                      'display this at the top line
    Call Msleep(1)
    Lowerline                                                   'select the lower line
    Lcd "Abstandsmessung mit 2x2 IR-LEDs"
    Call Msleep(1)                                              'display this at the lower line
    _lcd_e = 64                                                 'Lower half of 4-line display is selected
    Lcd "nix"
    Call Msleep(1)
    Lowerline
    Lcd "nix"
    
    Call Msleep(1500)
    
    Do
       Call Acs
    
       Reset Led0
       Reset Led1
       Reset Led2
       Reset Led3
    
       Call Motordir(1 , 1)
       Call Motorpwm(197 , 197)
    
       If Acs_left > 251 And Acs_right > 251 Then
          _lcd_e = 128
          Cls
          Lcd ""                                                'display this at the top line
          Call Msleep(1)
          Lowerline                                             'select the lower line
          Lcd "Abstand li: " ; Acs_left ; " Abstand re: " ; Acs_right ;       'Wert ausgeben auf Display
          Set Led1
          Call Motordir(1 , 0)
          Call Motorpwm(0 , 0)
          Call Msleep(300)
          Call Motorpwm(77 , 77)
          Call Msleep(700)
       End If
    
       If Acs_left > 251 Then
          _lcd_e = 128
          Cls
          Lcd ""                                                'display this at the top line
          Call Msleep(1)
          Lowerline                                             'select the lower line
          Lcd "Abstand li: " ; Acs_left ; " Abstand re: " ; Acs_right ;       'Wert ausgeben auf Display
          Set Led1
          Call Motordir(1 , 1)
          Call Motorpwm(0 , 0)
          Call Msleep(300)
          Call Motorpwm(77 , 0)
          Call Msleep(700)
       End If
    
       If Acs_right > 251 Then
          _lcd_e = 128
          Cls
          Lcd ""                                                'display this at the top line
          Call Msleep(1)
          Lowerline                                             'select the lower line
          Lcd "Abstand li: " ; Acs_left ; " Abstand re: " ; Acs_right ;       'Wert ausgeben auf Display
          Set Led2
          Call Motordir(1 , 1)
          Call Motorpwm(0 , 0)
          Call Msleep(300)
          Call Motorpwm(0 , 77)
          Call Msleep(700)
       End If
    
    Loop
    End
    
    Sub Acs
       Ocr2 = 253
       Set Acs_led_left
       While Acs_tsop = 1 And Ocr2 > 151
          Acs_count = 8
          While Acs_count > 0
          Wend
          Ocr2 = Ocr2 - 1
       Wend
       Reset Acs_led_left
       Acs_left = Ocr2
       While Acs_tsop = 0
       Wend
    
       Ocr2 = 253
       Set Acs_led_right
       While Acs_tsop = 1 And Ocr2 > 151
          Acs_count = 8
          While Acs_count > 0
          Wend
          Ocr2 = Ocr2 - 1
       Wend
       Reset Acs_led_right
       Acs_right = Ocr2
       While Acs_tsop = 0
       Wend
    End Sub
    
    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 Portd.7 = 1 Else Portd.7 = 0
    End Sub
    
    Function Getkeys() As Byte
       Getkeys = Pinc / 16                                      ' Pins einlesen und nach rechts schieben
       Getkeys = Getkeys Xor 255                                ' invertieren
       Getkeys = Getkeys And 15                                 ' Bit4-7 ausblenden
    End Function
    
    Sub Odo_reset
       Disable Interrupts
       Odo_count_l = 0
       Odo_count_r = 0
       Enable Interrupts
    End Sub
    
    Sub Sleep(byval Pause As Byte)
       Count36khz = Pause
       While Count36khz > 0
       Wend
    End Sub
    
    Sub Msleep(byval Pause As Word)
       While Pause > 0
          Call Sleep(36)
          Decr Pause
       Wend
    End Sub
    
    Isr_int0:
       Incr Odo_count_l
       Led0 = Pind.2
    Return
    
    Isr_int1:
       Incr Odo_count_r
       Led3 = Pind.3
    Return
    
    Isr_timer2_comp:
       Toggle Acs_led_36khz
    Return
    
    Isr_timer2_ovl:
       Tcnt2 = Tcnt2 + 99                                       'Frequenzkorrektur 36kHz
       Reset Acs_led_36khz
       If Count36khz > 0 Then Decr Count36khz
       If Acs_count > 0 Then Decr Acs_count
    Return

  4. #34
    Neuer Benutzer Öfters hier
    Registriert seit
    17.12.2008
    Beiträge
    9
    Hallo,
    Ich möchte so eine Bascom program in die NiboBee laden. Aber nach compilieren und Program chip komt die meldung:USB Programmer not found. Muss ich bei OPTIONS was änderen? Bitte helfe.
    M.f.g.
    Jack.

  5. #35
    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

    Ich verwende zum Flashen der Bascom-Hex-Dateien den orginalen nibobee-Programmer mit dem ich auch die C-Programme flashe.

    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!

Seite 4 von 4 ErsteErste ... 234

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress