Ich habe aber in deinem Code In1 und rIn2 nicht gesehen.Zitat von Redals1311
MfG
hallo leute
habe ein problem und zwar, erzeuge ich mit dem pic16f877 an ccp1 sprich PORTC,2 eine PWm. Diese Funktioniet auch einbandfrei.
So mein Problem ist, diese PWm ist an einem L&203 enable eingang. Mit diesem baustein kann man dann je nach pwm die motorleistung steuern,. DIe polung der motoren kann man mit dem In1 ode rIn2 beeinflußen.
SO mein problem sit, wenn ich eine Pwm erzeuge und den motor rechtsrum laufen lassen und er soll nach 10 sek in die andere richtung fahren macht er dies nicht.
Kann mir jemand bitte weiterhelfen, wär echt spitze.
hier sit noch der code für eine pwm:
wie müsste ich ihn umstellen das nach einer zeit die räder rückwärtsfahren:
Code:LIST p=16F877 ; list directive to define processor #include <p16F877.inc>; processor specific variable defs __CONFIG H'3F39' ; _CP_OFF & _WDT_OFF & _PWRTE_ON & _RC_OSC ERRORLEVEL -302 ; unterdrücke Warnungen zur Bank-Auswahl ERRORLEVEL -203 ;************************************************************** ;* ;* Pinbelegung ;* ---------------------------------- ;* PORTA: ;* 1 ;* 2 ;* 3 ;* 4 ;* PORTB: ;* 1 ;* 2 ;* 3 ;* 4 ;* 5 ;* 6 ;* 7 ;* PORTC: ;* 1 ;* 2 PWM-Ausgang ;* 3 ;* 4 ;* 5 ;* 6 ;* 7 ;* ;************************************************************** ;********************************************************** Counter1 EQU H'20' Counter2 EQU H'21' Counter3 EQU H'22' Zahl EQU H'23' Zahl_2 EQU H'24' ; Anfangsinitialisierung Initialisierung bsf STATUS,RP0 clrf TRISB clrf TRISD bcf STATUS,RP0 clrf PORTC clrf PORTB bsf PORTB,5 bcf PORTB,4 clrf Zahl init ; Vorteiler 16:1 und Timer2 einschalten BsF T2CON,T2CKPS1 ; Vorteiler 16:1 bcf T2CON,T2CKPS0 BSF T2CON,TMR2ON ; Timer2 ein ; Frequenz auf 10 kHz einstellen BSF STATUS,RP0 ; Bank1 MOVLW D'90' MOVWF PR2 ; 2,5 kHz BCF STATUS,RP0 ; Bank1 ; Tastverhältnis auf 50% einstellen MOVLW D'62' ;62 MOVWF CCPR1L ; 50% von 124 ; RC2/CCP1 auf Ausgang stellen BSF STATUS,RP0 ; Bank1 BCF TRISC, 2 ; RC2: output=0 BCF STATUS,RP0 ; Bank 0 ; PWM MODE mit CCP1 initialisieren CLRF CCP1CON ; CCP1-Modus aus BSF CCP1CON,CCP1M3 ; CCP1-Modus PWM-Mode BSF CCP1CON,CCP1M2 loop call Verzögerung_1s call Verzögerung_1s call Verzögerung_1s bcf PORTB,5 bsf PORTB,4 call Verzögerung_1s call Verzögerung_1s call Verzögerung_1s goto loop #include "Verz\Verz_a.inc" end
Ich habe aber in deinem Code In1 und rIn2 nicht gesehen.Zitat von Redals1311
MfG
ja muss ja auch nciht
habe dafür die PINS PORTB,5 und PORTB,4
diese sind ausschlagebend für die Polung
O.K.
Sie müssen aber für die Richtungänderung seine Zustände ändern und das sehe ich in Deinem Code nicht, nur immer PORTB,5=0 und PORTB,4=1.
MfG
doch weiter unten
hier habe ich anderen code sollte aber das gleihe bewirken =)
weißt du du den was ich meine?
hast du nicht noch ideeen?
Code:LIST p=16F877 ; list directive to define processor #include <p16F877.inc>; processor specific variable defs __CONFIG H'3F39' ; _CP_OFF & _WDT_OFF & _PWRTE_ON & _RC_OSC ERRORLEVEL -302 ; unterdrücke Warnungen zur Bank-Auswahl ERRORLEVEL -203 ;************************************************************** ;* ;* Pinbelegung ;* ---------------------------------- ;* PORTA: ;* 1 ;* 2 ;* 3 ;* 4 ;* PORTB: ;* 1 ;* 2 ;* 3 ;* 4 ;* 5 ;* 6 ;* 7 ;* PORTC: ;* 1 ;* 2 PWM-Ausgang ;* 3 ;* 4 ;* 5 ;* 6 ;* 7 ;* ;************************************************************** ;********************************************************** Counter1 EQU H'20' Counter2 EQU H'21' Counter3 EQU H'22' Zahl EQU H'23' Zahl_2 EQU H'24' ADW_1 EQU H'25' ; Anfangsinitialisierung Initialisierung bsf STATUS,RP0 clrf TRISB clrf TRISD bcf STATUS,RP0 clrf PORTC clrf PORTB ; bsf PORTB,5 ; bcf PORTB,4 init clrf PORTB bsf PORTB,4 ; Vorteiler 16:1 und Timer2 einschalten BsF T2CON,T2CKPS1 ; Vorteiler 16:1 bcf T2CON,T2CKPS0 BSF T2CON,TMR2ON ; Timer2 ein ; Frequenz auf 10 kHz einstellen BSF STATUS,RP0 ; Bank1 MOVLW D'90' MOVWF PR2 ; 2,5 kHz BCF STATUS,RP0 ; Bank1 ; Tastverhältnis auf 50% einstellen MOVLW D'47' ;62 MOVWF CCPR1L ; 50% von 124 ; RC2/CCP1 auf Ausgang stellen BSF STATUS,RP0 ; Bank1 BCF TRISC, 2 ; RC2: output=0 BCF STATUS,RP0 ; Bank 0 ; PWM MODE mit CCP1 initialisieren CLRF CCP1CON ; CCP1-Modus aus BSF CCP1CON,CCP1M3 ; CCP1-Modus PWM-Mode BSF CCP1CON,CCP1M2 loop ; ADC-Vorbereitungen: ; ADC speed für (fosc/32) MHz einstellen bsf ADCON0, 7 ; ADCS1=1 bcf ADCON0, 6 ; ADCS0=0 ; ADC einschalten bsf ADCON0, 0 ; ADON=1 clrf ADW_1 bcf ADCON0, 5 bcf ADCON0, 4 bcf ADCON0, 3 ;call Verzögerung_1s bsf ADCON0, 2 warte_auf_ADW: btfsc ADCON0, 2 goto warte_auf_ADW movf ADRESH,W movwf ADW_1 movlw D'100' subwf ADW_1,W btfsc STATUS,C goto Signal goto loop Signal clrf PORTB bsf PORTB,5 ; Vorteiler 16:1 und Timer2 einschalten BsF T2CON,T2CKPS1 ; Vorteiler 16:1 bcf T2CON,T2CKPS0 BSF T2CON,TMR2ON ; Timer2 ein ; Frequenz auf 10 kHz einstellen BSF STATUS,RP0 ; Bank1 MOVLW D'90' MOVWF PR2 ; 2,5 kHz BCF STATUS,RP0 ; Bank1 ; Tastverhältnis auf 50% einstellen MOVLW D'62' ;62 MOVWF CCPR1L ; 50% von 124 ; RC2/CCP1 auf Ausgang stellen BSF STATUS,RP0 ; Bank1 BCF TRISC, 2 ; RC2: output=0 BCF STATUS,RP0 ; Bank 0 ; PWM MODE mit CCP1 initialisieren CLRF CCP1CON ; CCP1-Modus aus BSF CCP1CON,CCP1M3 ; CCP1-Modus PWM-Mode BSF CCP1CON,CCP1M2 loop2 ; ADC-Vorbereitungen: ; ADC speed für (fosc/32) MHz einstellen bsf ADCON0, 7 ; ADCS1=1 bcf ADCON0, 6 ; ADCS0=0 ; ADC einschalten bsf ADCON0, 0 ; ADON=1 clrf ADW_1 bcf ADCON0, 5 bcf ADCON0, 4 bcf ADCON0, 3 ;call Verzögerung_1s bsf ADCON0, 2 warte_auf_ADW2: btfsc ADCON0, 2 goto warte_auf_ADW movf ADRESH,W movwf ADW_1 movlw D'100' subwf ADW_1,W btfsc STATUS,C goto init goto loop2 #include "Verz\Verz_a.inc" end
Bleiben wir, bitte, bei einem Code, sonst bringt es nichts.
Ich habe noch mal dein ersten Code genauer angeschaut. Du initialisierst zwar PORTB,5=1 und PORTB,4=0, aber später läuft das Programm in endloser Schleife "loop" mit PORTB,5=0 und PORTB,4=1. Was soll die Drehrichtung ändern?
MfG
miris gerade aufgefallen,, ich habe den falschen code hoch geladen, und zwar sollte der code bewirken das der motor zuerst rechts rum dreht sprich PORTB,5 = 1 und PORTB,4 = 0
und nach 3 sekunden soll sich die drehrichtung ändern.
PORTB,5 = 0 und PORTB,4 = 1
In diesem fall sollte der Motor links herum laufen.
Mein problem is , wie ich es realisieren kann
Ganz einfach: so wie bisher mit PORTB,5=1 und PORTB,4=0 initialisieren, mit "call" 3s Verzögerung aufrufen und danach in die endlose Schleife "loop" mit PORTB,5=0 und PORTB,4=1 springen.
MfG
ja so wie ich da oben habe ....
ich habe einen sensor der mir eine spannung ausgibt. Der µC soll die SPannung verarbeiten, wenn ein Hinderniss bzw. Gegensand zu nah am sensor ist, soll der mOtor in die gegen gesetzte richtung fahren.
beide programme oben sind nicht funktionstüchtig
Der PIC macht alles, aber nur das, was im Programm steht. Versuche, bitte, ein Programmablaufdiagramm zu erstellen. Wie man das macht, steht in "Wiki":
https://www.roboternetz.de/wissen/in.../PIC_Assembler
In jedem Beitrag schreibst du etwas neues dazu, aber ich bin bisher nicht in der Lage mir dein Problem klar vorzustellen. Ich vermute nur, dass der A/D Wandler soll die Spannung vom Sensor messen und je nach Wert den Motor steuern.
MfG
Lesezeichen