Neueste Beiträge

#21
P
Projekte und Eigenbau / Aw: Robot-Car-Projekt
Letzter Beitrag von picass - 19.08.2023, 18:19:27 CEST
Hallo Ottmar!
Danke für das Zur-Verfügung-Stellen von Matheroutinen. Hab' sie gerade runter geladen und werde in den nächsten Tagen da rein schauen.
Es gibt Gründe, warum ich Interesse an den von dir verwendeten Routinen habe und das waren eigene Probleme im Umgang mit den Matheroutinen in Assembler, welche ich aus diversen Seiten im Inet eingesammelt hatte. Angefangen hatte mein Sammeln mit dem Blättern in einem Sachbuch aus dem Markt&Technik-Verlag mit dem Titel "Mit dem PIC-Controller erfolgreich arbeiten" von den Autoren Dr.A.König und M.König, erschienen 1996 für satte 90 DM. Nix Euro, DM !

Mithilfe der dort abgedruckten Matheroutinen wollte ich mich in Mathe mit dem PIC einarbeiten. Und brach mir die Finger ab, weil das einfach nicht klappen wollte. Wieder und wieder kontrollierte ich, ob ich beim Abtippen einen Fehler begangen haben könnte. War aber nicht. Nur die Rechenroutinen - "einfache" Subtraktionen - lieferten "unerwartete" Ergebnisse. Is klar, dann andere Routinen aus dem Inet gesucht, z.B. bei Sprut und sonstwo und auch da gab es haufenweise Überraschungen.

Bei den vielen Versuchen wuchs allerdings mein Verständnis für den Progablauf und irgendwann wurde mir klar, dass die tollen Vorlagen echte Rechenfehler produzierten!
Voll der Hammer! Einige Routinen lieferten in 50% aller möglichen Zahleneingaben ein falsches Ergebnis! Das hat mich vom Hocker gehauen, auch die "Doktoren" König hatten da fehlerhafte Programme in ihrem Buch.
Wenn du neugierig geworden sein solltest, dann schau mal in meinen Fred darüber rein:
https://www.pic-microcontroller.de/compiler-software/mplab-x-ide-fehler-bei-subtraktion-falsches-flag-gesetzt/
Diese Angelegenheit dieser fehlerhaften Routinen in Vorlagen ist für mich noch nicht erledigt. Zwar habe ich anschließend Wege gefunden, wie solche Fehler zu vermeiden sind, aber zufrieden bin ich noch nicht. Es ist möglich, dass in dem einen oder anderen vor allem älteren Programm von mir noch solche "Königs"-Fallen existieren. Seitdem bin ich hoch misstrauisch, was Assembler-Rechenroutinen angelangt, in welchen Subtraktion benutzt wird.
Grüße, picass
#22
O
Projekte und Eigenbau / Aw: Robot-Car-Projekt
Letzter Beitrag von Ottmar - 18.08.2023, 21:22:15 CEST
RoboCar Info 07

Hallo picass,
Danke für Deine tröstenden Worte... :-[ :)

Hallo Peter,
Danke für den Google-Tip daumen_hoch

Zitat von picass
...die schlichte Wahrheit: bei vielen (Teil-)Aspekten deiner Arbeiten zu diesem Projekt kann ich nicht mithalten. Es gibt da einfach Techniken, die ich selbst noch nicht oder nur in Ansätzen ausgeführt hatte. Schwitz....
Zitat Ende
(welche Techniken???)

Zu viel der Ehre picass! So ausgefeilt ist der RoboCar-Code bestimmt nicht. Zumindest die Mathe-Routinen habe ich von fremden Seiten abgeschaut (vgl. Hinweis in den entsprechenden Routinen).

Es gibt bestimmt noch elegantere Routinen, heute bin ich wieder auf eine weitere 16Bx16Bit Multiplikation gestossen, die  weniger als die Hälfte Code enthält, als die von mir derzeit benutzte Routine. Zur Zeit mache ich mir Gedanken über einen selbstbalancierenden Robot (mit PIC und Assembler), das wird aber wohl erst nächstes Jahr was werden...

Anbei die von Dir angesprochenen Programmteile, eingepackt in ein ASM-File (Copy- und Paste aus dem Original RoboCar.ASM), war also nicht sonderlich aufwendig dies zusammenzustellen. Das ASM-File ist mit den erforderlichen Einstellungen in der IDE für PIC16F1936 im Codefenster ohne weiteres Zutun lauffähig, in MPLAB 8.92 und wohl auch in MPLAB-X.
Mit dem Watch-Fenster und step by step, kannst Du Dir die Funktion von A-Z zu Gemüte führen (oder wer auch immer sonst noch das tun will).

Viel Spass

mfG Ottmar

P.S. ...ein bisschen mehr traffic könne dieses Forum schon gebrauchen... Diskussionen/Gedankenaustausch zum Programmieren mit PIC's würde mir echt Spass machen...


#23
P
Projekte und Eigenbau / Aw: Robot-Car-Projekt
Letzter Beitrag von picass - 16.08.2023, 10:55:23 CEST
Zitat von: Ottmar in 15.08.2023, 20:10:16 CESTRoboCar Info 06
Hmm.. anscheinend befinde ich mich auf dem besten Weg ein dauerhaftes Selbstgespräch zu führen...
mfG Ottmar
Hallo Ottmar! Diese deine Einschätzung geht nicht wirklich fehl! Leider!
Zu meinem "Anteil" daran sei gesagt: Zum einen war ich länger in Urlaub und zum anderen die schlichte Wahrheit: bei vielen (Teil-)Aspekten deiner Arbeiten zu diesem Projekt kann ich nicht mithalten. Es gibt da einfach Techniken, die ich selbst noch nicht oder nur in Ansätzen ausgeführt hatte. Schwitz.... Das bedeutet jedoch nicht, dass ich an deinen Berichten nicht teilhabe, nur eben leider als Beobachter und meist stiller Mitleser.

Mein erster Blick nach dem Urlaub auf die neu eingestellten Fotos erweckte bei mir allerdings Bewunderung. Und auch Freude darüber, dass du mit deinem Projekt so gut voran kommst. Der Robbi sieht inzwischen sehr eindrucksvoll aus. Kompliment für deine geleisteten Arbeiten, also mindestens eines! Würde mich sehr freuen, wenn du deine weiteren Arbeiten hier vorstellst und beschreibst.

An dem oben eingestellten Ausschnitt des Progs hinsichtlich der Mathe-Routinen bin ich sehr interessiert, wenn sie denn tatsächlich in Assembler stattfinden sollten. Wäre das so, könntest du vielleicht just diesen Teil deines Progs, in welchem die obigen Rechenmanöver ausgeführt sind, zur Begutachtung hier einstellen. Da würde ich gerne schauen, wie du die Mathe-Operationen ausgeführt hast.
Grüße, picass
#24
avatar_Peter
Projekte und Eigenbau / Aw: Robot-Car-Projekt
Letzter Beitrag von Peter - 15.08.2023, 20:55:47 CEST
Schönes Projekt.
Nur programmieren nicht mehr so viele in Assembler. Aber das sollte keinem von seinem Hobby 
abhalten. Nur weiter so.
 
#25
O
Projekte und Eigenbau / Aw: Robot-Car-Projekt
Letzter Beitrag von Ottmar - 15.08.2023, 20:10:16 CEST
RoboCar Info 06

Hallo,

Hmm.. anscheinend befinde ich mich auf dem besten Weg ein dauerhaftes Selbstgespräch zu führen...

Heute mal etwas zur Belegung der Pins des PIC16F1936 im Programmcode "RoboCar" (siehe angehängte Datei "Pinbelegung" und einige Gedanken zum Empfang des Bluetooth-Kommandos und zur Berechnung des Abstandes zum Hindernis aus der Laufzeitmessung des Ultraschallechos zur Hinderniserkennung.

Mit der Verwendung des PIC16F1936 bekommt man insgesamt 24 Pins,welche mehrfach mit Funktionen belegt sind. Eeinige Funktionen können mittels des Registers "APFCON: ALTERNATE PIN FUNCTION CONTROL" auf einen anderen Pin gelegt werden.

Die Mehrfachbenennung von Ports entspricht der unterschiedichen Verwendung der Portbits. Dies habe ich praktisch empfunden und verbessert m.E. die Lesbarkeit des Codes. Gleiches gilt auch für die Festlegung von Konstanten. Im Code sollten möglichst viele Zahlenwerte durch aussagekräftige Label ersetzt sein. So liest sich zu. "LED_AUS" leichter als dem entsprechend "bcf LED_PORT,RA3"

Auswertung des Bluetooth-Kommandos
----------------------------------
Manchen wir es vielleicht noch interessieren wie die per Bluetooth übermittelten Befehle ausgewertet werden. Dazu muß das Modul EUSART/SCI initiiert sein (vgl. EUSART.TXT).

Anmerkung: 
Zahlen S... oder DS beziehen sich auf die Seite im Datenblatt
zum PIC16F1936
;---------------------------------------------------------------------
;--EUSART Asynchronous Mode                                    ;S.291
;---------------------------------------------------------------------
   ;25.1.1.1 Enabling the Transmitter
   ;The EUSART transmitter is enabled for asynchronous operations 
   ;by configuring the following three control bits:
   ;• TXEN = 1    • SYNC = 0  • SPEN = 1
   ;All other EUSART control bits are assumed to be in default state.
   ;Setting the TXEN bit of the TXSTA register enables the transmitter 
   ;circuitry of the EUSART. Clearing the SYNC bit of the TXSTA register 
   ;configures the EUSART for asynchronous operation.    
   ;
;   BANKSEL  TXSTA       ;TRANSMIT STATUS AND CONTROL REGISTER  S.298
;   clrf     TXSTA
;   bsf      TXSTA,TXEN  ;b5 Transmit enabled
;   bcf      TXSTA,SYNC  ;b4 Asynchronous mode
;   bsf      TXSTA,BRGH  ;b2 "                in low speed
   ;
   ;25.1.2.1 Enabling the Receiver                             S.295
   ;The EUSART receiver is enabled for asynchronous operation by 
   ;configuring the following three control bits:
   ;• CREN = 1 • SYNC = 0  • SPEN = 1
   ;All other EUSART control bits are assumed to be in default state.
   ; 
   BANKSEL  RCSTA       ;RECEIVE STATUS bank3                  S.299
;  b7=1  SPEN  Serial port enabled RX/DT autom set as PORT pins
;  b6=0  RX    Selects 8-bit reception
;  b5=0  SREN  asyncmode don't care   
;  b4=1  CREN  enble async eceiver
;  b3=0  ADDEN don't care in 8bit async mode
;  b2=0  FERR  Flag framing error
;  b1=0  OERR  Flag overrun error
;  b0=0  RX9D don't care in 8 bit mode
   movlw    b'10010000'
   movwf    RCSTA
   ;   
   ;Setting the SPEN bit of the RCSTA register enables the EUSART and
   ;automatically configures the TX/CK I/O pin as an output. If the 
   ;TX/CK pin is shared with an analog peripheral, the analog I/O 
   ;function must be disabled by clearing the corresponding ANSEL bit.
   ;
   ;25.1.2.8 Asynchronous Reception Set-up:
   ;1.Initialize the SPBRGH, SPBRGL register pair and the BRGH and

Nun genügen die folgenden Zeilen um das Bluetooth-Kommando in die Arbeitsvariable zu kopieren:

btfss    PIR1,RCIF      ;=1? New Bluetooth command received?
GOTO     main_rx_loop   ;no, try it again
;                
BANKSEL  RCREG          ;bank3 
movf     RCREG,w        ;copy received command 
BANKSEL  0
movwf    tmpRCREG       ;containss now received Ascii code

Die weitere Auswertung gestaltet sich recht einfach durch Aufruf einer entsprechenden Subroutine (vgl. "Evaluate_Command.txt"

Berechnung der Distanz zu einem Hindernis
--------------------------------------------
Zum guten Schluss noch die Überlegungen zum Berechnen der Entferung zwischen US-Modul und Hindernis (Beispiel: gesamter Laufweg des Schalls = 2m).

fosc/4  = 2.000.000Hz, wc (working cycle = fov_schall = 343,29m/s s_schall = 2x1m, Zeitmessung mit 16bittigem TIMER1

t_echo 2m     = 2m/343,29m/s    = 5,8260^(-3)s
TMER1H:L      = 5,8260-3s * 2   = 11652
s_echa/us     = 343,29m/s /10^5 = 3,4329^(-4)m = 0,34329mm
s_echo/wc     = 0,34329mm/2     = 0,17164mm
distance (mm) = TMR1H:L * (0,17164mm/2)
distance (mm) = TMR1H:L * 0,08582

Mit Integer ist es einfacher zu rechnen. Daher wir als Multiplikator kein Bruch sondern die Ganzzahl = 8582 vewendet und im Ergbnis das Komma an die richtige Stelle gesetzt, bzw. die letzten 5 Stellen einfach nicht ausgegeben -> Ergebnis in mm.
        TMR1H:L * 8582 -> 11652 * 8582 = 0099997464
                                        = 0,99997464m
        BCD9:0 0099997464 ->          = 999,97464mmm

Hier noch die Adressen für die entsprechenden Subroutinen zu
16x16Bit-Multiplikation und zur Binär-BCD-Konvertierung:

http://www.piclist.com/techref/microchip/math/mul/index.htm
http://www.piclist.com/techref/microchip/math/radix/index.htm

mfG Ottmar

#26
O
Projekte und Eigenbau / Aw: Robot-Car-Projekt
Letzter Beitrag von Ottmar - 09.08.2023, 11:21:52 CEST
Hallo Admin,
war wohl auch ein wenig ungeschickt von mir das so im Codefenster zu verteilen. Hätte ich doch anstatt dessen, alles in einem Rutsch als Textdatei hochladen können  :-[ . Nun ja, man lernt eben nie aus!

DanKe und Grüße 
Ottmar

@pic18 
Danke für die Klarstellung meines Tippfehlers! daumen_hoch
#27
avatar_ADMIN
Projekte und Eigenbau / Aw: Robot-Car-Projekt
Letzter Beitrag von ADMIN - 09.08.2023, 09:08:05 CEST
Hallo
Ich habe das Limit für Zeichen um einiges höher gesetzt. Nun sollte es keine Probleme mehr geben.
Euer ADMIN.
#28
P
Projekte und Eigenbau / Aw: Robot-Car-Projekt
Letzter Beitrag von pic18 - 09.08.2023, 06:45:28 CEST
MCU:      PIC1F1936 (28Pin) sollte 16F1936 heißen
liebe Grüße
pic18
#29
O
Projekte und Eigenbau / Aw: Robot-Car-Projekt
Letzter Beitrag von Ottmar - 08.08.2023, 23:51:52 CEST
RoboCar Info 5-2

Hier also der letzte Teil zur Programmübersicht von RoboCar223

mfG Ottmar

MODULES IN INIT PROJECT    ROBOCAR2023
03_INIT_Robo2023.INC
   OSCCON
   PORTA    L298_PORT
   PORTB    LCD_PORT
            AD_PORT
   PORTC    SCI_PORT
            US_PORT
            PWM_PORT
   T2CON
   CCPR1L
   CCPR2L
   CCP1CON
   PSTR1CON
   PR2
   PR4
   CCPTMRS0
   PIR1,TMR2IF
   PIR3,TMR4IF
   RCSTA
   BAUDCON
   SPBRGH
   SPBRGL
   ADCON0
   ADCON1
   FVRCON 
   CALL  Lcd_Init
   CALL  Lcd_Ready
   PRESET VARIABLES
   T6CON
   TMR6
   INTCON   
;----------------------------------------   
SUBROUTINES IN PROJECT    RoboCar2023
   04_DRIVE_Robo2023.INC
      Eval_Cmd             ;Calling up the subprograms for evaluating
                           ; the possible Rx commands
      Cmd_Lights           
         cmd_eval_front    ;frontlights on
         cmd_eval_front0   :frontlights off
         cmd_eval_back
         cmd_eval_back0
         cmd_eval_park
         cmd_eval_park0
         cmd_eval_horn
         cmd_eval_horn0
         cmd_eval_extra
         cmd_eval_extra0
      Cmd_Extra            ;switches headlights and taillights to flashing
         cmd_extra_on
         cmd_extra_high
         cmd_extra_low
      Cmd_Extra_OFF 
      Cmd_Drive
         cmd_drive_F....
      Cmd_Speed
         cmd_speed_0...10
;----------------------------------------   
   05_US_Robo2023.INC
      US_Measure        ;US-Burst, TMR1,runtime measurement
      US_Distance       ;convert TMR1 to BCD4:0
      Obstacle_Left     ;Obstacle closer than 15cm on the left?
      Obstacle_Right    ;Obstacle closer than 15cm on the right?
      Bin32_Dez
      ;MULT16x16        ;unused
      ;
   07_LCD_Robo2023.INC
   table_debug          ;eg. dt LINE1+.0,"Rx:. Vdd ..,..V", 80h
   LcdOut_Table         ;Read table, display Mask in LCD 
   Out_Menue_Control    ;Output of the parameters in the LCD
         out_vdd
         out_info1_info2
   Out_Vdd_MCU
   Out_Vdd_Drive
   Out_DC1_DC2
   Out_Rx               ;control actual bluetooth command
   Out_US_Distance
   Out_Obstacle_Left    ;Set a flag if there is an obstacle
   Out_Obstacle_Right
   ;
   LeadZero_Lcd         removes leading zeros  004,72 -> 4,72
   BCD_2Bit_Mult10
   Bin16_Dez
   Bin8_Dez_1
   OutBinReg            ;Debugging
   Mult10_8Bit 
   ;----------------------------------------
#30
O
Projekte und Eigenbau / Aw: Robot-Car-Projekt
Letzter Beitrag von Ottmar - 08.08.2023, 23:49:56 CEST
RoboCar Info 5-1

Leider sind mit dem vrgesehene Text im Codefenster erneut die 500 Zeichen überschreitten, also teile ich das nochmals auf und schreibe noch einen Folgebeitrag

mfG Ottmar


16F1936_RoboCar2023.ASM
=======================
; Projekt:  Control of RobotCar via Bluetooth
; MCU:      PIC1F1936 (28Pin)
; Info:     Program Memory Words Used:  1294
;           Average duration of a program cycle 
;           with LCD ca. 38ms (for program development)
;           without LCD (final) around ca. 2.7-4ms
;           fosc=8MHz
   #INCLUDE <02_HEADER_RoboCar2023.INC>   ;Labels, definitions, constants, etc
   #INCLUDE <03_INIT_Robo2023.INC>        Initialization of all required 
                                          ;registers, ports, PWM, EUSART, LCD, etc
   main;
      CALL     Debug_Menue    ;Creates the LCd menu for function 
                              ;testing and troubleshooting
   main_loop:
      CALL     US_Measure     ;Send/receive US-Burst/Echo 
      CALL     US_Distance    ;Calculates the distance from US-runtime
      CALL     Obstacle_Dodge ;Calculates required avoidance of obstacles  
      btfsc    Flags,EXTRA    ;=1 execute functions when waiting for rx cmd
      CALL     Cmd_Extra      ;Switching of special functions light, horn
         ;
   main_rx_loop:              ;waiting for bluetooth command     
      btfss    PIR1,RCIF      ;=1? New data received with USART?
      GOTO     main_rx_loop   ;no, try it again
      ;CALL  Rx_Error         ;Error checking RCSTA,FERR:OERR (disabled)
      BANKSEL  RCREG          ;bank3 
      movf     RCREG,w        ;copy received command 
      BANKSEL  0
      movwf    tmpRCREG       ;contains received Ascii code
      ;
      CALL     Out_RX         ;display received Bluetooth-command (cmd)
      CALL     Eval_Cmd       ;evaluate/execute command ->04_DRIVE_Robo
   GOTO  main_loop 
;----------------------------------------
      #INCLUDE <04_DRIVE_Robo2023.INC> ;Drive control subprograms
      #INCLUDE <05_US_Robo2023.INC>    ;ultrasonic distance measurement
      #INCLUDE <07_LCD_Robo2023.INC>   ;LCD output, binary BCD conversion, etc
      #INCLUDE <HD44780_2WIRE.INC>     ;initialization, DDRAM, DATA
   END
;-----------------------------------------
SECTIONS IN FILE 02_HEADER_ROBOCAR2023.INC
;  --SUPPRESSED WARNINGS
;  --MCUDEFINITION / CONFIGURATION
;  --VARIABLES DEFINITIONS
;    LABELS & CONSTANTS
;  --L298_PORT (PORTA)
;  --LCD_PORT (PORTB)
;  --AD_PORT  (PORTB)
;  --SCI_PORT EUSART (PORTC) 
;  --US_PORT (PORTC)
;  --PWM_PORT (PORTC)
;  --DDRAM ADDRESSES for output in debug menu
;    LCD-PROPERTIES 
;    RESET VECTOR
;    INTERRUPT VEKTOR
         ISR
            isr_tmr6
;----------------------------------------