- LiFePO4 Speicher Test         
Seite 3 von 3 ErsteErste 123
Ergebnis 21 bis 22 von 22

Thema: ProBot mit asuro-Mega8

  1. #21
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo

    Recht einfach kann man beim Probot die Antriebsplatine austauschen:

    Bild hier  
    http://www.youtube.com/watch?v=Z7VJT-kw9VQ

    Die Steuerplatine treibt die Motoren der umgebauten Servos über die orginalen Servoplatinen an. Die Potis dienen nun zum Kalibrieren des Nullpunkts (am Anfang des Videos). Leider haben meine Omniwheels fast keinen Grip auf dem Laminat.

    Das kleine Demo erzeugt die Servoimpulse asurolike mit Sleep():
    Code:
    // Erster Test mit Omniwheels                                           19.10.09 mic
    
    #include "asuro-probot.h"
    #include "asuro-probot.c"
    
    void omniwheels(char x, char y, char z, int t)
    {
    	int i;
    	while(t--)
    	{
    		PORTB |= (1<<PB1);
    		Sleep(36+x);
    		PORTB &= ~(1<<PB1);
    		PORTB |= (1<<PB2);
    		Sleep(36+y);
    		PORTB &= ~(1<<PB2);
    		PORTB |= (1<<PB4);
    		Sleep(36+z);
    		PORTB &= ~(1<<PB4);
    		for(i=15; i--; Sleep(36));
    	}
    }
    int main(void)
    {
    	Init();
    	PORTC |= 3; // Odo-PullUps simulieren für PollSwitch()
    	PORTB &= ~(1<<PB5 | 1<<PB4 | 1<<PB2 | 1<<PB1);
    	while(!PollSwitch());
    	while(PollSwitch());
    	StatusLED(RED);
    
       while(!PollSwitch()) // kalibrieren
       {
    		omniwheels(0,0,0,10);
    	}
    	while(PollSwitch()); //fertig
    	StatusLED(YELLOW);
    	Beep(200);
    	Msleep(200);
    	Beep(1000);
    
       while(1) // Demo
       {
          omniwheels(2,2,2,200);
          Beep(100);
          omniwheels(-2,-2,-2,300);
          Beep(200);
          omniwheels(5,5,5,400);
          Beep(100);
          omniwheels(-7,-7,-7,400);
          Beep(200);
          Msleep(200);
          Beep(200);
          omniwheels(2,-2,0,300);
          Beep(200);
          omniwheels(4,-4,0,300);
          Beep(200);
          omniwheels(0,5,-3,300);
          Beep(200);
          omniwheels(5,3,-5,300);
          Beep(200);
          Msleep(200);
          Beep(200);
       }
    }
    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!

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

    Da ich mich immer noch nicht für ein richtig großes Projekt entscheiden kann, spiele ich mit den Dingen, die ich hier so rumliegen habe:





    Outtake:


    Diesmal alles in Bascom:
    Code:
    ' asuro sendet vt100                                               23.7.2001 mic
    
    ' https://www.roboternetz.de/community/showthread.php?41788-Kameramodul&p=399123&viewfull=1#post399123
    ' https://www.roboternetz.de/community/showthread.php?47457-Hardware-Mitmach-Projekt-Kamera-f%FCr-den-RP6&p=463226&viewfull=1#post463226
    '
    
    $regfile = "m8def.dat"                                      ' asuro mit Mega8
    $crystal = 8000000                                          ' taktet mit 8MHz
    $baud = 2400                                                ' IR-Baudrate
    
    ' https://www.roboternetz.de/community/showthread.php?44458-Grundsatzfrage-zu-Arrays-in-Bascom
    ' (Trick zu Index 0?)
    Dim Bildspeicher_000 As Byte                                ' Bildspeicher für 16*24 byte
    Dim Bildspeicher(383) As Byte
    
    'allgemeine Variablen
    Dim X As Byte , Y As Byte
    Dim S As String * 30                                        ' max 30 Positionen
    
    ' VT100-Funktionen
    Declare Sub Set_cursor(byval X As Byte , Byval Y As Byte )
    Declare Sub Print_at(byval X As Byte , Byval Y As Byte , Text As String )
    
    ' Tasten
    Portc.0 = 1                                                 ' Tastenpullups einschalten (ODOLed)
    Portc.1 = 1                                                 ' beist sich mit den Servos :(
    
    ' Charlieplexing
    Declare Sub Charlie(byval Bitnr As Byte)
    Dim Charliedata(12) As Byte                                 ' Bitmuster fürs Charlieplexing an PC0 bis PC3
    Charliedata(01) = &B11001000                                ' Highnipple ist DDR, Lownipple ist Port
    Charliedata(02) = &B10101000
    Charliedata(03) = &B10011000
    Charliedata(04) = &B11000100
    Charliedata(05) = &B01100100
    Charliedata(06) = &B01010100
    Charliedata(07) = &B10100010
    Charliedata(08) = &B01100010
    Charliedata(09) = &B00110010
    Charliedata(10) = &B10010001
    Charliedata(11) = &B01010001
    Charliedata(12) = &B00110001
    
    ' Beeper
    Declare Sub Beep(byval Dauer As Word)                       ' Dauer in ms
    Config Pind.5 = Output                                      ' Beeper
    
    ' Servos
    Declare Sub Servoimpuls()
    Dim Servo1 As Byte , Servo2 As Byte , Servo3 As Byte , Tmp As Byte
    Config Pinb.1 = Output
    Config Pinb.2 = Output
    Config Pinb.4 = Output
    
    ' Kamera
    Config Adc = Free , Prescaler = Auto , Reference = Avcc     ' Dummy-Setup!!!
    
    Admux = 0
    Set Admux.refs1                                             ' Internal 2.56V Voltage Reference
    Set Admux.refs0                                             ' with external capacitor at AREF pin
    Set Admux.adlar                                             ' ausrichtung links (adch) für 8-bit
    Set Admux.2                                                 ' Kanal 4
    'Sfior = 0
    ' eventuell besser für andere Funktionen:
    Sfior = Sfior And &B00011111                                ' adts2=0 adts1=0 adts0=0
    Adcsr = 0
    Set Adcsr.aden                                              ' ADC Enable
    Set Adcsr.adps0                                             ' ADC Prescaler Select Bits (2)
    
    Set Adcsr.5                                                 ' adate (ADC Auto Trigger Enable)
    Set Adcsr.adif                                              ' ADC Interrupt Flag
    
    Set Adcsr.adsc                                              ' ADC Start Conversion
    
    Start Adc
    Enable Interrupts
    
    
    Dim Rewrite As Byte
    S = "asuro mit VT100-Terminal"
    Rewrite = 0
    
    Print "{027}[1;1H";                                         ' Home
    Print "{027}[2J";                                           ' clear terminal screen
    Call Set_cursor(5 , 2)
    Print "hallo"
    Print "{027}[1m";                                           ' bold on
    Call Print_at(10 , 5 , S)
    Print "{027}[0m";                                           ' Attribute off
    
    Call Set_cursor(5 , 2)
    Print "calibrieren.."
    
    Call Beep(150)
    Waitms 100
    Call Beep(150)
    Waitms 100
    Call Beep(150)
    Waitms 100
    Call Beep(150)
    
    Servo1 = 10
    Servo2 = 10
    Servo3 = 10
    While Pinc.0 = 1                                            ' Servos kalibrieren, Abruch mit Taste "Boot"
       Call Servoimpuls()
       Waitms 17
    Wend
    While Pinc.0 = 0
    Wend
    Call Set_cursor(5 , 2)
    Print "and go!      "
    Call Beep(1000)
    
    Servo1 = 10                                                 ' 3 Sekunden vorwärts
    servo2 = 5
    Servo3 = 15
    For X = 0 To 150
       Call Servoimpuls()
       Waitms 17
    Next X
    Servo2 = 10
    Servo3 = 10
    Waitms 1000
                                                                 ' Liniendemo
    Do
       Do                                                       ' Auf Bildanfang warten
       X = 0
          While Adch > 30
          Wend
          While Adch < 50
             Incr X
          Wend
       Loop Until X > 40
       X = 50                                                   ' die zu lesende Zeile
       While X > 0
          While Adch > 30
          Wend
          While Adch < 50
          Wend
          Decr X
       Wend
       X = 0
       While Adch > 65                                          ' Hell/Dunkel-Schwelle
         Incr X
       Wend
    
       Servo1 = 10                                              ' zum Strich schwenken
       'Servo2 = 10
       'Servo3 = 10
       If X > 13 Then                                           ' gegenuhrzeiger
          Servo1 = 5
          'Servo2 = 5
          'Servo3 = 5
       End If
       If X < 11 Then                                           ' uhrzeiger
          Servo1 = 15
          'Servo2 = 15
          'Servo3 = 15
       End If
    
       Call Servoimpuls()                                       ' hihi :)
    
       If Rewrite > 0 Then                                      ' Debug
          Decr Rewrite
       Else
          Call Set_cursor(0 , 15)
          Print X;
          Print " ";
          'S = Space(x)
          'Print S;
          'Print "***"
          'Waitms 300
          Rewrite = 20
       End If
    
       X = X / 2                                                ' Ausgabe per Charlieplexing
       Call Charlie(x)
    Loop
    
    End
    
    Sub Servoimpuls()
       Tmp = Servo1 * 10                                        'Servoansteuerung
       If Tmp > 0 Then
          Portb.1 = 1
          While Tmp > 0
             Waitus 10
             Decr Tmp
          Wend
          Portb.1 = 0
       End If
    
       Tmp = Servo2 * 10
       If Tmp > 0 Then
          Portb.2 = 1
          While Tmp > 0
             Waitus 10
             Decr Tmp
          Wend
          Portb.2 = 0
       End If
    
       Tmp = Servo3 * 10
       If Tmp > 0 Then
          Portb.4 = 1
          While Tmp > 0
             Waitus 10
             Decr Tmp
          Wend
          Portb.4 = 0
       End If
    End Sub
    
    
    Sub Beep(byval Dauer As Word)                               ' 2kHz, Dauer in ms
       While Dauer > 0
          Portd.5 = 0
          Waitus 250
          Portd.5 = 1
          Waitus 250
          Portd.5 = 0
          Waitus 250
          Portd.5 = 1
          Waitus 250
          Decr Dauer
       Wend
    End Sub
    
    Sub Set_cursor(byval X As Byte , Byval Y As Byte )
       Print Chr(27) ; "[" ; Str(y) ; ";" ; Str(x) ; "H";       ' set cursorpos
    End Sub
    
    Sub Print_at(byval X As Byte , Byval Y As Byte , Text As String)
       Print Chr(27) ; "[" ; Str(y) ; ";" ; Str(x) ; "H";       ' set cursorpos
       Print Text;
    End Sub
    
    Sub Charlie(byval Bitnr As Byte)                            ' Bitnummer 0-11
       Incr Bitnr                                               ' Startindex bei Arrays ist 1!
       Ddrc = 0
       Portc = 0
       If Bitnr > 0 Then
          If Bitnr < 13 Then
             Ddrc = Charliedata(bitnr) / 16
             Portc = Charliedata(bitnr) And 15
          End If
       End If
    End Sub
    Die Kamera hängt am Tasten-ADC des asuro, dieser wird bei meinem Clone nicht verwendet. Basis für das Kameraprogramm war die Bascomversion vom RP6 das ich nahezu unverändert eingebaut habe:
    https://www.roboternetz.de/community...l=1#post399123

    Die Servoimpulse werden recht trickreich erzeugt, denn die Impulspause wird durch das Einlesen der Kamera erzeugt. 50 Bilder pro Sekunde ergeben fast genau 20ms Impulspause;)

    Die 12 Leds werden per Charlieplexing an PC0 bis PC3 angesteuert. Beim asuro sind das die Pins für die Linien- und ODO-Sensoren. Da diese Anschlüsse von meiner Omniplatine nicht verwendet werden, drängt sich diese Verwendung geradezu auf. Blöderweise überschneidet sich das aber mit der Tastenauswertung...

    Das Kugelrad ist ein aufgeschnittener Tennisball mit Skaterlagern, Laminatlagerhaltern und Zollstockachse. Das ist eigentlich der Grund für meine aktuelle Omniwheel-Aktivität:
    https://www.roboternetz.de/community...tatt-omniwheel

    Da ich ja normalerweise in C programmiere, verblüffen mich die gelegentlichen Ausflüge in die Basccom-Welt. Ganz schön clever, was da alles geboten wird. Der Printbefehl z.B. funktioniert prima auch ohne eigenes Setup für den Timer2 (36kHz), weil dies schon im Bootloader erledigt wird. Wirklich überraschend ist auch das Terminal von Bascom, weil es offensichtlich doch TV100-Codes interpretieren kann:
    https://www.roboternetz.de/community...-f%FCr-den-RP6

    Es gibt noch viel zu erforschen...

    Gruß

    mic
    Geändert von radbruch (02.05.2015 um 21:33 Uhr)
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

Seite 3 von 3 ErsteErste 123

Berechtigungen

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

Labornetzteil AliExpress