- Labornetzteil AliExpress         
RSS-Feed anzeigen

Searcher

TT als Linienfolger

Bewerten
Hab das Programm nochmal überarbeitet und ein Video eingestellt. Denke, daß man den TT schon als Linienfolger durchgehen lassen könnte
Code:
'#################################################  ##############################
'File: RC5_Linie_05.bas
'noch nicht ausgereifte Funktionen:
'1. Fernbedienung eines Dreirades mit RC5 Fernbedienung
'2. Linienfolgung
'IDE: BASCOM-AVR Demoversion 1.11.9.8
'
'HW circuit: Linienfolger_mit_FB.aac
'PWM Erzeugung mit Timer1
'TSOP an PB3. BASCOM Kommando Getrc5 nutzt Timer0 !!!
'#################################################  ##############################

$regfile = "attiny45.dat"
$eepleave
$framesize = 32                         'default?
$swstack = 32                           'default?
$hwstack = 36
$crystal = 8000000
$lib "mcsbyte.lbx"                      'only byte operations

Dim Address As Byte , Command As Byte   'variables for getrc5
Dim Rc5_flag As Byte

Dim Average_speed As Byte
Average_speed = 0                       'Durchschittsgeschwindigkeit mit 0 initialisieren

Dim Adc_low As Byte                     'variables for adc result

Config Portb = Input                    'ports initialisieren
Portb = Portb Or &H1F                   'ports mit pullups auf definierten Pegel

Config Rc5 = Pinb.3                     'TSOP at PB3
Config Portb.4 = Output                 'PB4 as output, OC1B, MotorX
Config Portb.1 = Output                 'PB1 as output, OC1A, MotorY

Tccr1 = Tccr1 Or &B01100000             'set PWM1A & OC1A (PB1)
Gtccr = Gtccr Or &B01100000             'set PWM1B & OC1B (PB4) clear TCNT1 on OCR1C match
Ocr1a = 0                               'initialise OCR1A -> low, no pulses at OC1A
Ocr1b = 0                               'initialise OCR1B -> low, no pulses at OC1B
Ocr1c = 249                             'set pwm frq. 8Mhz / 4 / (249 + 1)= 8kHz
Tccr1 = Tccr1 Or &B00000011             'Einschalten TIMER1 - prescaler = 4

Didr0 = &B00110100                      'ADC power save PB2,4,5. PB3 (TSOP) nicht abschalten
Admux = &B10101011                      '1,1V internal reference, ADLAR=1 (left adjusted), PB5 PB2 gain 20
Adcsrb.7 = 1                            'bipolar mode

Adcsra = Adcsra Or &B00001110           'ADC Int. enable, ADC prescaler auf 64 (125000Hz at 8MHz systemclock)
Adcsra.7 = 1                            'turn on ADC

Pcmsk = Pcmsk Or &B00001000             'Pin Change Interrupt PCINT3 auf Pin PB3 TSOP erlauben
Enable Pcint0                           'Setzt PCIE (Pin Change Interrupt Enable) in GIMSK Register

On Adc Adcmessung_to_pwm                'Wenn Messung fertig -> Interrupt
On Pcint0 Set_rc5_flag                  'ISR wenn Pin Change Int. Flag von PB3 TSOP kommt

Enable Interrupts                       'Interrupts generell erlauben


Do                                      'Hauptschleife
   If Average_speed <> 0 Then Power Adcnoise       'Wenn PWM eingeschaltet dann Sensoren messen
                                                   'im noise reduction mode des µC
'hier könnte sich noch ein Bug verstecken, da man nach Datenblatt vorher sicherstellen soll, daß keine Messung läuft

   If Rc5_flag = 1 Then                 'nach interrupt durch TSOP
      Gosub Get_rc5                     'lies RC5 CMD
      Rc5_flag = 0
      Pcmsk = Pcmsk Or &B00001000       'enable interrupts von PB3 (disabled in ISR)
   End If
Loop


Adcmessung_to_pwm:                      'ISR f. ADC Auslesen und Setzen der PWM
   Adc_low = Adch                       'nur 8 bit der Messung nutzen
   If Adc_low.7 = 1 Then                'negativer Wert vom ADC
         Adc_low = Not Adc_low          'umsetzen des 2er Komplements
         Adc_low = Adc_low + 1          'umsetzen des 2er Komplements
         Shift Adc_low , Right , 1      'Trimmen des Meßwertes/Abschneiden Meßschwankungen
         Ocr1a = Average_speed - Adc_low       'PWM Pulsweite setzen
         Ocr1b = Average_speed + Adc_low       'PWM Pulsweite setzen
      Else                              'Meßwert positiv - keine Umwandlung
         Shift Adc_low , Right , 1      'Trimmen
         Ocr1a = Average_speed + Adc_low       'PWM Pulsweite setzen
         Ocr1b = Average_speed - Adc_low       'PWM Pulsweite setzen
   End If
Return

Set_rc5_flag:                           'ISR Pin Change interrupt durch tsop - setzt flag
   Pcmsk = Pcmsk And &B11110111         'disable weitere interrupts von PB3
   Rc5_flag = 1
Return

Get_rc5:                                'Unterprogramm zum FB Kommando auswerten
      Getrc5(address , Command)         'procedure returns FF FF if no RC5 message
      If Address <> &HFF Then           'RC5 Nachricht empfangen then...
         Command = Command And &B01111111       'toggle bit auf Null
         Select Case Command
            Case &H1D : Average_speed = 0       'stop bei home taste
                        Ocr1a = 0
                        Ocr1b = 0
            Case &H01 : Average_speed = 66       'verschiedene Fahrstufen
            Case &H02 : Average_speed = 72
            Case &H03 : Average_speed = 80
            Case &H04 : Average_speed = 90
            Case &H05 : Average_speed = 100
            Case &H06 : Average_speed = 110
            Case &H07 : Average_speed = 120
            Case &H08 : Average_speed = 130
            Case &H09 : Average_speed = 140
         End Select
      End If
Return

"TT als Linienfolger" bei Twitter speichern "TT als Linienfolger" bei Facebook speichern "TT als Linienfolger" bei Mister Wong speichern "TT als Linienfolger" bei YiGG.de speichern "TT als Linienfolger" bei Google speichern "TT als Linienfolger" bei del.icio.us speichern "TT als Linienfolger" bei Webnews speichern "TT als Linienfolger" bei My Yahoo speichern

Aktualisiert: 05.05.2011 um 21:54 von Searcher

Stichworte: - Stichworte bearbeiten
Kategorien
Projekte , ATtiny45 , Root , Linienfolger

Kommentare

  1. Avatar von defineshot
    j'avais le même problème et j'ai trouvé une solution:
    Für das Lesen der Werte des Smartmetern reicht es einfach, die Kommunikation zwischen WR SUN 2000 und Smartmeter SM DTSU666-H zu beobachten.
    WR stellt den SM mehrmals pro Sekunde in Frage. Nachdem ich den Verkehr mitgeschnitten hatte, habe ich die richtigen Stellen im Datensatz gefunden.
    Es ist wichtig, einen passenden Pegelwandler von RS485 auf TTL (0-5 Volt) einzusetzen. Ich habe das Pollin LC-TTL-MAX485 Modul für 2 Euro verwendet.
    La communication se fait avec 9600 Bd et 8n1. Hier ein Teil des Datenpakets:
    Anforderung vom WR an Zähler:
    HTML-Code:
    0B03 Teilnehmer Adresse 0B->11 Kommando Register Lesen 03
    0836 Adresse 0836 hex -> 2102 dez
    0050 50 hex -> 80 dez es werden 80 Register a 2 Byte, 160 Byte angefordert
    A732 CRC
    
    Antwort vom Zähler an WR:
    0B Teilnehmer Adresse 0B -> 11 ist Adresse des DTSU666-H am Modbus
    03 Kommando Register Lesen 03
    A0 A0 hex -> 160 dez Byte die gesendet werden
    
    2102 2104 2106 2108 2110 2112 2114 2116
    4094 DD2F 4094 FDF4 40AA 5E35 4366 E666 4367 6666 4365 999A 4367 CCCD 43C7 F333 32 Bytes
    
    2118 2120 2122 2124 2126 2128 2130 2132 ab Adresse 2126, 49. - 52. Byte sind C551 899A = -3352,6 Watt
    43C7 999A 43C7 C000 43C8 8CCD 4247 E148 C551 899A C484 CCCD C484 ACCD C499 9666 Aktuelle Leistung in Watt, negativ = Export
    #### ####
    2134 2136
    C317 E666 C2B8 CCCD C205 999A C1D0 CCCD 4552 4B33 4485 A000 4485 1CCD 4499 D333
    
    2150 2158
    BF7E F9DB BF7E 353F BF7E F9DB BF7F 7CEE C502 C28F C430 FC29 C435 4A3D C424 BF5C
    
    2166 2170 2174
    4153 851F 41B0 51EC 4133 851F 42A3 051F 4503 9614 4436 7EB8 4438 1852 4439 2000
    0CF1 CRC
  2. Avatar von ThomasHinze
    Ihre Antwort ist sehr detailliert.
    rice purity test
  3. Avatar von lewishamilton0998
    Solltest du spezielle Funktionen benötigen, dann teste verschiedene kostenlose Programme aus, um das passende für dich zu finden. retro bowl college

LiFePO4 Speicher Test