PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ADC=>PWM PIC16F876A mit Sprut-Code, Problem (gelöst!)



PsiQ
19.01.2007, 14:48
Hallo Leute!
Hoffe alle sind gut durch den Sturm gekommen!

Problem:

Also ich wollte das ADC-PWM Beispiel von Sprut nachbauen:
http://www.sprut.de/electronic/pic/programm/adcpwm.htm

Und dann erweitern, dass ich 2x adc benutze um 2 pwm signale auszugeben..
Ich krieg das ding aber nichtmal mit 1:1 nachmachen zum laufen *verzweifel*

Also folgendes:
Diesen Schaltplan hab ich exakt so gebaut:
http://www.directupload.net/file/d/947/8RLMuGAz_jpg.htm
(da fällt mir ein ich mach mal noch nen kondensator an vss-vdd)

Dann hab ich gedacht ich stopf die software mal ohne modifikation rein..
geht net.. findet beim kompilieren die datai p16.. net ..

also hab ich die *.inc vom 16f876A direkt in die datei kopiert, sollte ja gehen.. nun kompiliert ers auch ohne fehlermeldung, und schreibts auch fehlerfrei in den ic, ohne meckern..
aber laufen tut nix..

WO liegt mein denkfehler?
muß ich an den definitionen der software was ändern? weil das original für einen pic16f876 war und ich jezt einen pic16f876A benutze ?
muß ich das andere *.inc benutzen?

irgendwie blick ichs net..
spannung der schaltung sind exakte 5,0V (78L05)
gnd liegt auch da wos soll
RA0 geht je nach potistellung von 0-5Volt, also auch ok

aber weder mitm digi-multimeter noch mit dem oszilloskop bekomme ich irgendwas raus an RC2

edit: hier noch der code:

list p=16f876

ERRORLEVEL -302 ;SUPPRESS BANK SELECTION MESSAGES
;================================================= =========================
;
; Register Definitions
;
;================================================= =========================

W EQU H'0000'
F EQU H'0001'

;----- Register Files------------------------------------------------------

INDF EQU H'0000'
TMR0 EQU H'0001'
PCL EQU H'0002'
STATUS EQU H'0003'
FSR EQU H'0004'
PORTA EQU H'0005'
PORTB EQU H'0006'
PORTC EQU H'0007'

PCLATH EQU H'000A'
INTCON EQU H'000B'
PIR1 EQU H'000C'
PIR2 EQU H'000D'
TMR1L EQU H'000E'
TMR1H EQU H'000F'
T1CON EQU H'0010'
TMR2 EQU H'0011'
T2CON EQU H'0012'
SSPBUF EQU H'0013'
SSPCON EQU H'0014'
CCPR1L EQU H'0015'
CCPR1H EQU H'0016'
CCP1CON EQU H'0017'
RCSTA EQU H'0018'
TXREG EQU H'0019'
RCREG EQU H'001A'
CCPR2L EQU H'001B'
CCPR2H EQU H'001C'
CCP2CON EQU H'001D'
ADRESH EQU H'001E'
ADCON0 EQU H'001F'

OPTION_REG EQU H'0081'
TRISA EQU H'0085'
TRISB EQU H'0086'
TRISC EQU H'0087'
PIE1 EQU H'008C'
PIE2 EQU H'008D'
PCON EQU H'008E'
SSPCON2 EQU H'0091'
PR2 EQU H'0092'
SSPADD EQU H'0093'
SSPSTAT EQU H'0094'
TXSTA EQU H'0098'
SPBRG EQU H'0099'
ADRESL EQU H'009E'
ADCON1 EQU H'009F'

EEDATA EQU H'010C'
EEADR EQU H'010D'
EEDATH EQU H'010E'
EEADRH EQU H'010F'

EECON1 EQU H'018C'
EECON2 EQU H'018D'

;----- STATUS Bits --------------------------------------------------------

IRP EQU H'0007'
RP1 EQU H'0006'
RP0 EQU H'0005'
NOT_TO EQU H'0004'
NOT_PD EQU H'0003'
Z EQU H'0002'
DC EQU H'0001'
C EQU H'0000'

;----- INTCON Bits --------------------------------------------------------

GIE EQU H'0007'
PEIE EQU H'0006'
T0IE EQU H'0005'
INTE EQU H'0004'
RBIE EQU H'0003'
T0IF EQU H'0002'
INTF EQU H'0001'
RBIF EQU H'0000'

;----- PIR1 Bits ----------------------------------------------------------

ADIF EQU H'0006'
RCIF EQU H'0005'
TXIF EQU H'0004'
SSPIF EQU H'0003'
CCP1IF EQU H'0002'
TMR2IF EQU H'0001'
TMR1IF EQU H'0000'

;----- PIR2 Bits ----------------------------------------------------------

EEIF EQU H'0004'
BCLIF EQU H'0003'
CCP2IF EQU H'0000'

;----- T1CON Bits ---------------------------------------------------------

T1CKPS1 EQU H'0005'
T1CKPS0 EQU H'0004'
T1OSCEN EQU H'0003'
NOT_T1SYNC EQU H'0002'
T1INSYNC EQU H'0002' ; Backward compatibility only
T1SYNC EQU H'0002'
TMR1CS EQU H'0001'
TMR1ON EQU H'0000'

;----- T2CON Bits ---------------------------------------------------------

TOUTPS3 EQU H'0006'
TOUTPS2 EQU H'0005'
TOUTPS1 EQU H'0004'
TOUTPS0 EQU H'0003'
TMR2ON EQU H'0002'
T2CKPS1 EQU H'0001'
T2CKPS0 EQU H'0000'

;----- SSPCON Bits --------------------------------------------------------

WCOL EQU H'0007'
SSPOV EQU H'0006'
SSPEN EQU H'0005'
CKP EQU H'0004'
SSPM3 EQU H'0003'
SSPM2 EQU H'0002'
SSPM1 EQU H'0001'
SSPM0 EQU H'0000'

;----- CCP1CON Bits -------------------------------------------------------

CCP1X EQU H'0005'
CCP1Y EQU H'0004'
CCP1M3 EQU H'0003'
CCP1M2 EQU H'0002'
CCP1M1 EQU H'0001'
CCP1M0 EQU H'0000'

;----- RCSTA Bits ---------------------------------------------------------

SPEN EQU H'0007'
RX9 EQU H'0006'
RC9 EQU H'0006' ; Backward compatibility only
NOT_RC8 EQU H'0006' ; Backward compatibility only
RC8_9 EQU H'0006' ; Backward compatibility only
SREN EQU H'0005'
CREN EQU H'0004'
ADDEN EQU H'0003'
FERR EQU H'0002'
OERR EQU H'0001'
RX9D EQU H'0000'
RCD8 EQU H'0000' ; Backward compatibility only

;----- CCP2CON Bits -------------------------------------------------------

CCP2X EQU H'0005'
CCP2Y EQU H'0004'
CCP2M3 EQU H'0003'
CCP2M2 EQU H'0002'
CCP2M1 EQU H'0001'
CCP2M0 EQU H'0000'

;----- ADCON0 Bits --------------------------------------------------------

ADCS1 EQU H'0007'
ADCS0 EQU H'0006'
CHS2 EQU H'0005'
CHS1 EQU H'0004'
CHS0 EQU H'0003'
GO EQU H'0002'
NOT_DONE EQU H'0002'
GO_DONE EQU H'0002'
ADON EQU H'0000'

;----- OPTION_REG Bits ----------------------------------------------------

NOT_RBPU EQU H'0007'
INTEDG EQU H'0006'
T0CS EQU H'0005'
T0SE EQU H'0004'
PSA EQU H'0003'
PS2 EQU H'0002'
PS1 EQU H'0001'
PS0 EQU H'0000'

;----- PIE1 Bits ----------------------------------------------------------

ADIE EQU H'0006'
RCIE EQU H'0005'
TXIE EQU H'0004'
SSPIE EQU H'0003'
CCP1IE EQU H'0002'
TMR2IE EQU H'0001'
TMR1IE EQU H'0000'

;----- PIE2 Bits ----------------------------------------------------------

EEIE EQU H'0004'
BCLIE EQU H'0003'
CCP2IE EQU H'0000'

;----- PCON Bits ----------------------------------------------------------

NOT_POR EQU H'0001'
NOT_BO EQU H'0000'
NOT_BOR EQU H'0000'

;----- SSPCON2 Bits --------------------------------------------------------

GCEN EQU H'0007'
ACKSTAT EQU H'0006'
ACKDT EQU H'0005'
ACKEN EQU H'0004'
RCEN EQU H'0003'
PEN EQU H'0002'
RSEN EQU H'0001'
SEN EQU H'0000'

;----- SSPSTAT Bits -------------------------------------------------------

SMP EQU H'0007'
CKE EQU H'0006'
D EQU H'0005'
I2C_DATA EQU H'0005'
NOT_A EQU H'0005'
NOT_ADDRESS EQU H'0005'
D_A EQU H'0005'
DATA_ADDRESS EQU H'0005'
P EQU H'0004'
I2C_STOP EQU H'0004'
S EQU H'0003'
I2C_START EQU H'0003'
R EQU H'0002'
I2C_READ EQU H'0002'
NOT_W EQU H'0002'
NOT_WRITE EQU H'0002'
R_W EQU H'0002'
READ_WRITE EQU H'0002'
UA EQU H'0001'
BF EQU H'0000'

;----- TXSTA Bits ---------------------------------------------------------

CSRC EQU H'0007'
TX9 EQU H'0006'
NOT_TX8 EQU H'0006' ; Backward compatibility only
TX8_9 EQU H'0006' ; Backward compatibility only
TXEN EQU H'0005'
SYNC EQU H'0004'
BRGH EQU H'0002'
TRMT EQU H'0001'
TX9D EQU H'0000'
TXD8 EQU H'0000' ; Backward compatibility only

;----- ADCON1 Bits --------------------------------------------------------

ADFM EQU H'0007'
PCFG3 EQU H'0003'
PCFG2 EQU H'0002'
PCFG1 EQU H'0001'
PCFG0 EQU H'0000'

;----- EECON1 Bits --------------------------------------------------------

EEPGD EQU H'0007'
WRERR EQU H'0003'
WREN EQU H'0002'
WR EQU H'0001'
RD EQU H'0000'

;================================================= =========================
;
; RAM Definition
;
;================================================= =========================

__MAXRAM H'1FF'
__BADRAM H'08'-H'09'
__BADRAM H'88'-H'89', H'8F'-H'90', H'95'-H'97', H'9A'-H'9D'
__BADRAM H'105', H'107'-H'109'
__BADRAM H'185', H'187'-H'189', H'18E'-H'18F'

;================================================= =========================
;
; Configuration Bits
;
;================================================= =========================

_CP_ALL EQU H'0FCF'
_CP_HALF EQU H'1FDF'
_CP_UPPER_256 EQU H'2FEF'
_CP_OFF EQU H'3FFF'
_DEBUG_ON EQU H'37FF'
_DEBUG_OFF EQU H'3FFF'
_WRT_ENABLE_ON EQU H'3FFF'
_WRT_ENABLE_OFF EQU H'3DFF'
_CPD_ON EQU H'3EFF'
_CPD_OFF EQU H'3FFF'
_LVP_ON EQU H'3FFF'
_LVP_OFF EQU H'3F7F'
_BODEN_ON EQU H'3FFF'
_BODEN_OFF EQU H'3FBF'
_PWRTE_OFF EQU H'3FFF'
_PWRTE_ON EQU H'3FF7'
_WDT_ON EQU H'3FFF'
_WDT_OFF EQU H'3FFB'
_LP_OSC EQU H'3FFC'
_XT_OSC EQU H'3FFD'
_HS_OSC EQU H'3FFE'
_RC_OSC EQU H'3FFF'

;================================================= =========================
;
; Configuration
;
;================================================= =========================


__CONFIG _CP_OFF & _DEBUG_OFF & _LVP_OFF & _WRT_ENABLE_ON & _PWRTE_ON & _WDT_OFF & _BODEN_OFF & _XT_OSC



;================================================= =========================
;
; Variable Definition
;
;================================================= =========================

wait EQU 0x20

; Anfangsinitialisierung

init
; PWM vorbereiten
; Vorteiler 16:1 und Timer2 einschalten
BSF T2CON,T2CKPS1 ; Vorteiler 16:1
BSF T2CON,TMR2ON ; Timer2 ein

; Frequenz auf 1,22 kHz einstellen
BSF STATUS,RP0 ; Bank1
MOVLW D'255' ;
MOVWF PR2 ; 1.22 kHz
BCF STATUS,RP0 ; Bank1

; Tastverhältnis auf 50% einstellen
MOVLW D'127' ;
MOVWF CCPR1L ; 50%

; 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 ;

; ADC vorbereiten
; PortB vorbereiten
bsf STATUS, RP0 ; auf Bank 1 umschalten
movlw B'00000000' ; PortB alle output
movwf TRISB
bcf STATUS, RP0 ; auf Bank 0 zurückschalten
clrf PORTB ; alle LEDs ausschalten

; ADC einschalten
BSF ADCON0, 0 ; ADON=1

; ADC-Eingang AN0 auswählen
BCF ADCON0, 5 ; ADCHS2=0
BCF ADCON0, 4 ; ADCHS1=0
BCF ADCON0, 3 ; ADCHS0=0

; ADC speed für 20 MHz einstellen
BSF ADCON0, 7 ; ADCS1=1
BCF ADCON0, 6 ; ADCS0=0

; Daten linksbündig
BSF STATUS,RP0 ; Bank1
BCF ADCON1, 7 ; ADFM=0
BCF STATUS,RP0 ; Bank0


;************************************************* *********
; Hauptprogrammschleife

Main
;Eingangsspannung wandeln
BSF ADCON0, 2 ; ADC starten
loop
BTFSC ADCON0, 2 ; ist der ADC fertig?
GOTO loop ; nein, weiter warten

; Wert nach PortB schreiben
movfw ADRESH ; obere 8 Bit auslesen
movwf PORTB ; obere 8 Bit nach PortB

; Wert an PWM übergeben
MOVWF CCPR1L ; obere 8 Bit sind PWM

; Warten, damit der ADC sich erholen kann
clrf wait
warten
DECFSZ wait, f
goto warten

goto Main

end



Danke!

PICture
19.01.2007, 15:37
Hallo PsiQ!

Ich habe mir den Quellcode angeschaut und festgestellt, dass der PIC überhaupt nicht konfiguriert ist, nähmlich die __CONFiG...... Zeile fehlt. In dem Fall geht natürlich nichts. :)

Ich habe bisher kein Programm für PIC16F876 geschrieben, aber im Code habe ich den Anfang für PIC16F870 gepostet. Sollte es jedoch für den ´876 nicht passen, kannst Du das evtl. für den ´876A ändern, wenn Du es mit dem was im pic16F876A.inc steht, vergleichst (configuration bits).

Übrigens, ich habe alle Quelkodes im einem Verzeichniss, dass sich im Verzeichniss MPASM befindet.

MfG

LIST P=16F876A
include "P16F876A.inc"
__CONFIG _CP_OFF & _DEBUG_OFF & _WRT_ENABLE_ON & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _PWRTE_ON & _WDT_OFF & _HS_OSC

PsiQ
19.01.2007, 15:53
hmm- abba abba
da ist doch ne config zeile:
oben dein code, drunter der aus der datei von mir


;dein code
__CONFIG _CP_OFF & _DEBUG_OFF & _WRT_ENABLE_ON & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _PWRTE_ON & _WDT_OFF & _HS_OSC

;mein code
__CONFIG _CP_OFF & _DEBUG_OFF & _LVP_OFF & _WRT_ENABLE_ON & _PWRTE_ON & _WDT_OFF & _BODEN_OFF & _XT_OSC




Ääähm..

unterschiede:
_CPD_OFF finde ich bei mir net
_HS_OSC
öm, heißt XT nicht extern osci ? (hau mich wenns falsch ist ;-) )
edit: *hau* => das bestimmt doch den rrequenzgebertyp..
und der ist beim normalen quarz? -HS?

ich pack das ding jetzt mal als ersatz rein, und dann vergleich ichs ;-)

danke..


edit1:
die inc dateien liegen auch bei mir direkt in nem unterordner.. komischkomisch

edit2:
Hier dat config zuegs vom A :-b

;================================================= =========================
;
; Configuration Bits
;
;================================================= =========================

_CP_ALL EQU H'1FFF'
_CP_OFF EQU H'3FFF'
_DEBUG_OFF EQU H'3FFF'
_DEBUG_ON EQU H'37FF'
_WRT_OFF EQU H'3FFF' ; No prog memmory write protection
_WRT_256 EQU H'3DFF' ; First 256 prog memmory write protected
_WRT_1FOURTH EQU H'3BFF' ; First quarter prog memmory write protected
_WRT_HALF EQU H'39FF' ; First half memmory write protected
_CPD_OFF EQU H'3FFF'
_CPD_ON EQU H'3EFF'
_LVP_ON EQU H'3FFF'
_LVP_OFF EQU H'3F7F'
_BODEN_ON EQU H'3FFF'
_BODEN_OFF EQU H'3FBF'
_PWRTE_OFF EQU H'3FFF'
_PWRTE_ON EQU H'3FF7'
_WDT_ON EQU H'3FFF'
_WDT_OFF EQU H'3FFB'
_RC_OSC EQU H'3FFF'
_HS_OSC EQU H'3FFE'
_XT_OSC EQU H'3FFD'
_LP_OSC EQU H'3FFC'

LIST

PsiQ
19.01.2007, 16:02
oooh , äääh, aaah

muß ich das
_WRT_ENABLE_ON
durch
_WRT_OFF EQU H'3FFF' ; No prog memmory write protection
ersetzen ??

das _WRT_ENABLE_ON
steht beim A garnet mit dabei, bzw eben anders ;-)

PICture
19.01.2007, 16:08
Bei den PIC16F8XX ist es so, das kein extra Konfiguration Bit für externen Oscillator gibt. Dennen PIC´s ist es egal, woher der Systemtakt kommt, hauptsächlich sie haben auf dem Pin OSCI einen Takt. Es ist am sichersten, wegen Konfigurationbits immer in der xxx.inc Datei zu prüfen, welche Optionen der konkrete PIC hat, da es nicht einheitlich ist.

MfG

PICture
19.01.2007, 16:16
Sorry! Dann habe ich die Zeile mit __CONFIG..... übersehen. Es mussen nicht alle Konfigurationbits definiert sein. Und das EQU H´XXXX´ habe ich nocht nie gesehen. Normaleweise definiert man die Konfiguration immer selber, wie man das haben will.

zu edi2: die xxx.inc datei muss aber mit "include" in die Quelldatei eigebunden werden.

MfG

PsiQ
19.01.2007, 16:55
Juchhu! *Freu*

funktioniert .. lässt sich 0 - 99,6% duty cycle regeln

lag das nur an dem _WRT_ENABLE_ON
was beim 876A _WRT_OFF heißen muß..hmm ?
schön \:D/

der funktionierende code wie er im pic steckt:
(oben das komplette *.inc vom 876A bis config bits)


list p=16f876a

ERRORLEVEL -302 ;SUPPRESS BANK SELECTION MESSAGES

IFNDEF __16F876A
MESSG "Processor-header file mismatch. Verify selected processor."
ENDIF

;================================================= =========================
;
; Register Definitions
;
;================================================= =========================

W EQU H'0000'
F EQU H'0001'

;----- Register Files------------------------------------------------------

INDF EQU H'0000'
TMR0 EQU H'0001'
PCL EQU H'0002'
STATUS EQU H'0003'
FSR EQU H'0004'
PORTA EQU H'0005'
PORTB EQU H'0006'
PORTC EQU H'0007'
PCLATH EQU H'000A'
INTCON EQU H'000B'
PIR1 EQU H'000C'
PIR2 EQU H'000D'
TMR1L EQU H'000E'
TMR1H EQU H'000F'
T1CON EQU H'0010'
TMR2 EQU H'0011'
T2CON EQU H'0012'
SSPBUF EQU H'0013'
SSPCON EQU H'0014'
CCPR1L EQU H'0015'
CCPR1H EQU H'0016'
CCP1CON EQU H'0017'
RCSTA EQU H'0018'
TXREG EQU H'0019'
RCREG EQU H'001A'
CCPR2L EQU H'001B'
CCPR2H EQU H'001C'
CCP2CON EQU H'001D'
ADRESH EQU H'001E'
ADCON0 EQU H'001F'

OPTION_REG EQU H'0081'
TRISA EQU H'0085'
TRISB EQU H'0086'
TRISC EQU H'0087'
PIE1 EQU H'008C'
PIE2 EQU H'008D'
PCON EQU H'008E'
SSPCON2 EQU H'0091'
PR2 EQU H'0092'
SSPADD EQU H'0093'
SSPSTAT EQU H'0094'
TXSTA EQU H'0098'
SPBRG EQU H'0099'
CMCON EQU H'009C'
CVRCON EQU H'009D'
ADRESL EQU H'009E'
ADCON1 EQU H'009F'

EEDATA EQU H'010C'
EEADR EQU H'010D'
EEDATH EQU H'010E'
EEADRH EQU H'010F'

EECON1 EQU H'018C'
EECON2 EQU H'018D'

;----- STATUS Bits --------------------------------------------------------

IRP EQU H'0007'
RP1 EQU H'0006'
RP0 EQU H'0005'
NOT_TO EQU H'0004'
NOT_PD EQU H'0003'
Z EQU H'0002'
DC EQU H'0001'
C EQU H'0000'

;----- INTCON Bits --------------------------------------------------------

GIE EQU H'0007'
PEIE EQU H'0006'
T0IE EQU H'0005'
INTE EQU H'0004'
RBIE EQU H'0003'
T0IF EQU H'0002'
INTF EQU H'0001'
RBIF EQU H'0000'

;----- PIR1 Bits ----------------------------------------------------------

ADIF EQU H'0006'
RCIF EQU H'0005'
TXIF EQU H'0004'
SSPIF EQU H'0003'
CCP1IF EQU H'0002'
TMR2IF EQU H'0001'
TMR1IF EQU H'0000'

;----- PIR2 Bits ----------------------------------------------------------

CMIF EQU H'0006'
EEIF EQU H'0004'
BCLIF EQU H'0003'
CCP2IF EQU H'0000'

;----- T1CON Bits ---------------------------------------------------------

T1CKPS1 EQU H'0005'
T1CKPS0 EQU H'0004'
T1OSCEN EQU H'0003'
NOT_T1SYNC EQU H'0002'
T1INSYNC EQU H'0002' ; Backward compatibility only
T1SYNC EQU H'0002'
TMR1CS EQU H'0001'
TMR1ON EQU H'0000'

;----- T2CON Bits ---------------------------------------------------------

TOUTPS3 EQU H'0006'
TOUTPS2 EQU H'0005'
TOUTPS1 EQU H'0004'
TOUTPS0 EQU H'0003'
TMR2ON EQU H'0002'
T2CKPS1 EQU H'0001'
T2CKPS0 EQU H'0000'

;----- SSPCON Bits --------------------------------------------------------

WCOL EQU H'0007'
SSPOV EQU H'0006'
SSPEN EQU H'0005'
CKP EQU H'0004'
SSPM3 EQU H'0003'
SSPM2 EQU H'0002'
SSPM1 EQU H'0001'
SSPM0 EQU H'0000'

;----- CCP1CON Bits -------------------------------------------------------

CCP1X EQU H'0005'
CCP1Y EQU H'0004'
CCP1M3 EQU H'0003'
CCP1M2 EQU H'0002'
CCP1M1 EQU H'0001'
CCP1M0 EQU H'0000'

;----- RCSTA Bits ---------------------------------------------------------

SPEN EQU H'0007'
RX9 EQU H'0006'
RC9 EQU H'0006' ; Backward compatibility only
NOT_RC8 EQU H'0006' ; Backward compatibility only
RC8_9 EQU H'0006' ; Backward compatibility only
SREN EQU H'0005'
CREN EQU H'0004'
ADDEN EQU H'0003'
FERR EQU H'0002'
OERR EQU H'0001'
RX9D EQU H'0000'
RCD8 EQU H'0000' ; Backward compatibility only

;----- CCP2CON Bits -------------------------------------------------------

CCP2X EQU H'0005'
CCP2Y EQU H'0004'
CCP2M3 EQU H'0003'
CCP2M2 EQU H'0002'
CCP2M1 EQU H'0001'
CCP2M0 EQU H'0000'

;----- ADCON0 Bits --------------------------------------------------------

ADCS1 EQU H'0007'
ADCS0 EQU H'0006'
CHS2 EQU H'0005'
CHS1 EQU H'0004'
CHS0 EQU H'0003'
GO EQU H'0002'
NOT_DONE EQU H'0002'
GO_DONE EQU H'0002'
ADON EQU H'0000'

;----- OPTION_REG Bits -----------------------------------------------------

NOT_RBPU EQU H'0007'
INTEDG EQU H'0006'
T0CS EQU H'0005'
T0SE EQU H'0004'
PSA EQU H'0003'
PS2 EQU H'0002'
PS1 EQU H'0001'
PS0 EQU H'0000'

;----- PIE1 Bits ----------------------------------------------------------

ADIE EQU H'0006'
RCIE EQU H'0005'
TXIE EQU H'0004'
SSPIE EQU H'0003'
CCP1IE EQU H'0002'
TMR2IE EQU H'0001'
TMR1IE EQU H'0000'

;----- PIE2 Bits ----------------------------------------------------------

CMIE EQU H'0006'
EEIE EQU H'0004'
BCLIE EQU H'0003'
CCP2IE EQU H'0000'

;----- PCON Bits ----------------------------------------------------------

NOT_POR EQU H'0001'
NOT_BO EQU H'0000'
NOT_BOR EQU H'0000'

;----- SSPCON2 Bits --------------------------------------------------------

GCEN EQU H'0007'
ACKSTAT EQU H'0006'
ACKDT EQU H'0005'
ACKEN EQU H'0004'
RCEN EQU H'0003'
PEN EQU H'0002'
RSEN EQU H'0001'
SEN EQU H'0000'

;----- SSPSTAT Bits -------------------------------------------------------

SMP EQU H'0007'
CKE EQU H'0006'
D EQU H'0005'
I2C_DATA EQU H'0005'
NOT_A EQU H'0005'
NOT_ADDRESS EQU H'0005'
D_A EQU H'0005'
DATA_ADDRESS EQU H'0005'
P EQU H'0004'
I2C_STOP EQU H'0004'
S EQU H'0003'
I2C_START EQU H'0003'
R EQU H'0002'
I2C_READ EQU H'0002'
NOT_W EQU H'0002'
NOT_WRITE EQU H'0002'
R_W EQU H'0002'
READ_WRITE EQU H'0002'
UA EQU H'0001'
BF EQU H'0000'

;----- TXSTA Bits ---------------------------------------------------------

CSRC EQU H'0007'
TX9 EQU H'0006'
NOT_TX8 EQU H'0006' ; Backward compatibility only
TX8_9 EQU H'0006' ; Backward compatibility only
TXEN EQU H'0005'
SYNC EQU H'0004'
BRGH EQU H'0002'
TRMT EQU H'0001'
TX9D EQU H'0000'
TXD8 EQU H'0000' ; Backward compatibility only


;----- CMCON Bits ---------------------------------------------------------
C2OUT EQU H'0007'
C1OUT EQU H'0006'
C2INV EQU H'0005'
C1INV EQU H'0004'
CIS EQU H'0003'
CM2 EQU H'0002'
CM1 EQU H'0001'
CM0 EQU H'0000'

;----- CVRCON Bits --------------------------------------------------------
CVREN EQU H'0007'
CVROE EQU H'0006'
CVRR EQU H'0005'
CVR3 EQU H'0003'
CVR2 EQU H'0002'
CVR1 EQU H'0001'
CVR0 EQU H'0000'

;----- ADCON1 Bits --------------------------------------------------------

ADFM EQU H'0007'
PCFG3 EQU H'0003'
PCFG2 EQU H'0002'
PCFG1 EQU H'0001'
PCFG0 EQU H'0000'

;----- EECON1 Bits --------------------------------------------------------

EEPGD EQU H'0007'
WRERR EQU H'0003'
WREN EQU H'0002'
WR EQU H'0001'
RD EQU H'0000'

;================================================= =========================
;
; RAM Definition
;
;================================================= =========================

__MAXRAM H'1FF'
__BADRAM H'8F'-H'90', H'95'-H'97', H'9A'-H'9B'
__BADRAM H'105', H'107'-H'109'
__BADRAM H'185', H'187'-H'189', H'18E'-H'18F'

;================================================= =========================
;
; Configuration Bits
;
;================================================= =========================

_CP_ALL EQU H'1FFF'
_CP_OFF EQU H'3FFF'
_DEBUG_OFF EQU H'3FFF'
_DEBUG_ON EQU H'37FF'
_WRT_OFF EQU H'3FFF' ; No prog memmory write protection
_WRT_256 EQU H'3DFF' ; First 256 prog memmory write protected
_WRT_1FOURTH EQU H'3BFF' ; First quarter prog memmory write protected
_WRT_HALF EQU H'39FF' ; First half memmory write protected
_CPD_OFF EQU H'3FFF'
_CPD_ON EQU H'3EFF'
_LVP_ON EQU H'3FFF'
_LVP_OFF EQU H'3F7F'
_BODEN_ON EQU H'3FFF'
_BODEN_OFF EQU H'3FBF'
_PWRTE_OFF EQU H'3FFF'
_PWRTE_ON EQU H'3FF7'
_WDT_ON EQU H'3FFF'
_WDT_OFF EQU H'3FFB'
_RC_OSC EQU H'3FFF'
_HS_OSC EQU H'3FFE'
_XT_OSC EQU H'3FFD'
_LP_OSC EQU H'3FFC'

LIST


;================================================= =========================
;
; Configuration
;
;================================================= =========================


__CONFIG _CP_OFF & _DEBUG_OFF & _LVP_OFF & _WRT_OFF & _PWRTE_ON & _WDT_OFF & _BODEN_OFF & _HS_OSC



;================================================= =========================
;
; Variable Definition
;
;================================================= =========================

wait EQU 0x20

; Anfangsinitialisierung

init
; PWM vorbereiten
; Vorteiler 16:1 und Timer2 einschalten
BSF T2CON,T2CKPS1 ; Vorteiler 16:1
BSF T2CON,TMR2ON ; Timer2 ein

; Frequenz auf 1,22 kHz einstellen
BSF STATUS,RP0 ; Bank1
MOVLW D'255' ;
MOVWF PR2 ; 1.22 kHz
BCF STATUS,RP0 ; Bank1

; Tastverhältnis auf 50% einstellen
MOVLW D'127' ;
MOVWF CCPR1L ; 50%

; 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 ;

; ADC vorbereiten
; PortB vorbereiten
bsf STATUS, RP0 ; auf Bank 1 umschalten
movlw B'00000000' ; PortB alle output
movwf TRISB
bcf STATUS, RP0 ; auf Bank 0 zurückschalten
clrf PORTB ; alle LEDs ausschalten

; ADC einschalten
BSF ADCON0, 0 ; ADON=1

; ADC-Eingang AN0 auswählen
BCF ADCON0, 5 ; ADCHS2=0
BCF ADCON0, 4 ; ADCHS1=0
BCF ADCON0, 3 ; ADCHS0=0

; ADC speed für 20 MHz einstellen
BSF ADCON0, 7 ; ADCS1=1
BCF ADCON0, 6 ; ADCS0=0

; Daten linksbündig
BSF STATUS,RP0 ; Bank1
BCF ADCON1, 7 ; ADFM=0
BCF STATUS,RP0 ; Bank0


;************************************************* *********
; Hauptprogrammschleife

Main
;Eingangsspannung wandeln
BSF ADCON0, 2 ; ADC starten
loop
BTFSC ADCON0, 2 ; ist der ADC fertig?
GOTO loop ; nein, weiter warten

; Wert nach PortB schreiben
movfw ADRESH ; obere 8 Bit auslesen
movwf PORTB ; obere 8 Bit nach PortB

; Wert an PWM übergeben
MOVWF CCPR1L ; obere 8 Bit sind PWM

; Warten, damit der ADC sich erholen kann
clrf wait
warten
DECFSZ wait, f
goto warten

goto Main

end




Vielen vielen Dank !! O:)

PICture
19.01.2007, 17:17
Es ist meistens "nur" ein Fehler, und es reicht, damit es nicht funktioniert. :)

Du kannst aber wirklich mit dem Kopieren von *.inc Quelldateien in Deine Programme aufhören und statt dessen am Anfang Deines Programms nach der LIST Direktive die eine Zeilen einfügen:

include "P16F876A.inc" , oder ? :)

MfG

PsiQ
19.01.2007, 17:49
ich werds probieren :-b
8-[

nun denn, mal schaun wie ich da 2pwm rausbekomme ;-)

PsiQ
19.01.2007, 22:30
soo, ich bins nochmal! :-)
also
ich denke so funktionierts..
kann jedenfalls soweit ichs rausmessen kann ohne Störung durch den anderen Eingang ne Spannung an RA0 und RA1 einlesen,
und als pwm auf CCP1 und CCP2 ausgeben..

Ich messe das Tastverhältnis mit nem multimeter was eher für kfz ist..
das problem was ich da noch habe:
wenn ich das tastverhältnis schnell ganz runterdrehe, bleibt der wert bei so 20% hängen .. hmm (springt dann nach 2sek auf 0)
jetzt weiß ich net:
liegts an den potis?
liegts an der software
oder liegts am multimeter ..

wenn ichs langsam runterdrehe, gehts auf ~0,9 und dann vollns auf 0,0%

Problem was ich noch hatte, war, dass der adc lang genug umgeladen wird, damit net ra0 in ra1 einstört und andersrum..
ich denke ich habs hingekriegt mit der warteschleife von sprut, kann mir da noch jemand ein "positiv" geben ?

aktueller code, noch mit reinkopiertem *.inc File :-b


list p=16f876a

ERRORLEVEL -302 ;SUPPRESS BANK SELECTION MESSAGES

IFNDEF __16F876A
MESSG "Processor-header file mismatch. Verify selected processor."
ENDIF

;===
;
; Register Definitions
;
;=====

W EQU H'0000'
F EQU H'0001'

;----- Register Files------------------------------------------------------

INDF EQU H'0000'
TMR0 EQU H'0001'
PCL EQU H'0002'
STATUS EQU H'0003'
FSR EQU H'0004'
PORTA EQU H'0005'
PORTB EQU H'0006'
PORTC EQU H'0007'
PCLATH EQU H'000A'
INTCON EQU H'000B'
PIR1 EQU H'000C'
PIR2 EQU H'000D'
TMR1L EQU H'000E'
TMR1H EQU H'000F'
T1CON EQU H'0010'
TMR2 EQU H'0011'
T2CON EQU H'0012'
SSPBUF EQU H'0013'
SSPCON EQU H'0014'
CCPR1L EQU H'0015'
CCPR1H EQU H'0016'
CCP1CON EQU H'0017'
RCSTA EQU H'0018'
TXREG EQU H'0019'
RCREG EQU H'001A'
CCPR2L EQU H'001B'
CCPR2H EQU H'001C'
CCP2CON EQU H'001D'
ADRESH EQU H'001E'
ADCON0 EQU H'001F'

OPTION_REG EQU H'0081'
TRISA EQU H'0085'
TRISB EQU H'0086'
TRISC EQU H'0087'
PIE1 EQU H'008C'
PIE2 EQU H'008D'
PCON EQU H'008E'
SSPCON2 EQU H'0091'
PR2 EQU H'0092'
SSPADD EQU H'0093'
SSPSTAT EQU H'0094'
TXSTA EQU H'0098'
SPBRG EQU H'0099'
CMCON EQU H'009C'
CVRCON EQU H'009D'
ADRESL EQU H'009E'
ADCON1 EQU H'009F'

EEDATA EQU H'010C'
EEADR EQU H'010D'
EEDATH EQU H'010E'
EEADRH EQU H'010F'

EECON1 EQU H'018C'
EECON2 EQU H'018D'

;----- STATUS Bits --------------------------------------------------------

IRP EQU H'0007'
RP1 EQU H'0006'
RP0 EQU H'0005'
NOT_TO EQU H'0004'
NOT_PD EQU H'0003'
Z EQU H'0002'
DC EQU H'0001'
C EQU H'0000'

;----- INTCON Bits ------------------------

GIE EQU H'0007'
PEIE EQU H'0006'
T0IE EQU H'0005'
INTE EQU H'0004'
RBIE EQU H'0003'
T0IF EQU H'0002'
INTF EQU H'0001'
RBIF EQU H'0000'

;----- PIR1 Bits ------------

ADIF EQU H'0006'
RCIF EQU H'0005'
TXIF EQU H'0004'
SSPIF EQU H'0003'
CCP1IF EQU H'0002'
TMR2IF EQU H'0001'
TMR1IF EQU H'0000'

;----- PIR2 Bits ------------

CMIF EQU H'0006'
EEIF EQU H'0004'
BCLIF EQU H'0003'
CCP2IF EQU H'0000'

;----- T1CON Bits ---------

T1CKPS1 EQU H'0005'
T1CKPS0 EQU H'0004'
T1OSCEN EQU H'0003'
NOT_T1SYNC EQU H'0002'
T1INSYNC EQU H'0002' ; Backward compatibility only
T1SYNC EQU H'0002'
TMR1CS EQU H'0001'
TMR1ON EQU H'0000'

;----- T2CON Bits -----------

TOUTPS3 EQU H'0006'
TOUTPS2 EQU H'0005'
TOUTPS1 EQU H'0004'
TOUTPS0 EQU H'0003'
TMR2ON EQU H'0002'
T2CKPS1 EQU H'0001'
T2CKPS0 EQU H'0000'

;----- SSPCON Bits -----------------

WCOL EQU H'0007'
SSPOV EQU H'0006'
SSPEN EQU H'0005'
CKP EQU H'0004'
SSPM3 EQU H'0003'
SSPM2 EQU H'0002'
SSPM1 EQU H'0001'
SSPM0 EQU H'0000'

;----- CCP1CON Bits ------------------------

CCP1X EQU H'0005'
CCP1Y EQU H'0004'
CCP1M3 EQU H'0003'
CCP1M2 EQU H'0002'
CCP1M1 EQU H'0001'
CCP1M0 EQU H'0000'

;----- RCSTA Bits -------------------------

SPEN EQU H'0007'
RX9 EQU H'0006'
RC9 EQU H'0006' ; Backward compatibility only
NOT_RC8 EQU H'0006' ; Backward compatibility only
RC8_9 EQU H'0006' ; Backward compatibility only
SREN EQU H'0005'
CREN EQU H'0004'
ADDEN EQU H'0003'
FERR EQU H'0002'
OERR EQU H'0001'
RX9D EQU H'0000'
RCD8 EQU H'0000' ; Backward compatibility only

;----- CCP2CON Bits ------------

CCP2X EQU H'0005'
CCP2Y EQU H'0004'
CCP2M3 EQU H'0003'
CCP2M2 EQU H'0002'
CCP2M1 EQU H'0001'
CCP2M0 EQU H'0000'

;----- ADCON0 Bits -----------------

ADCS1 EQU H'0007'
ADCS0 EQU H'0006'
CHS2 EQU H'0005'
CHS1 EQU H'0004'
CHS0 EQU H'0003'
GO EQU H'0002'
NOT_DONE EQU H'0002'
GO_DONE EQU H'0002'
ADON EQU H'0000'

;----- OPTION_REG Bits --------------------

NOT_RBPU EQU H'0007'
INTEDG EQU H'0006'
T0CS EQU H'0005'
T0SE EQU H'0004'
PSA EQU H'0003'
PS2 EQU H'0002'
PS1 EQU H'0001'
PS0 EQU H'0000'

;----- PIE1 Bits --------------------------------

ADIE EQU H'0006'
RCIE EQU H'0005'
TXIE EQU H'0004'
SSPIE EQU H'0003'
CCP1IE EQU H'0002'
TMR2IE EQU H'0001'
TMR1IE EQU H'0000'

;----- PIE2 Bits --------------

CMIE EQU H'0006'
EEIE EQU H'0004'
BCLIE EQU H'0003'
CCP2IE EQU H'0000'

;----- PCON Bits -------------

NOT_POR EQU H'0001'
NOT_BO EQU H'0000'
NOT_BOR EQU H'0000'

;----- SSPCON2 Bits --------------------------------------------------------

GCEN EQU H'0007'
ACKSTAT EQU H'0006'
ACKDT EQU H'0005'
ACKEN EQU H'0004'
RCEN EQU H'0003'
PEN EQU H'0002'
RSEN EQU H'0001'
SEN EQU H'0000'

;----- SSPSTAT Bits -------------------------------------------------------

SMP EQU H'0007'
CKE EQU H'0006'
D EQU H'0005'
I2C_DATA EQU H'0005'
NOT_A EQU H'0005'
NOT_ADDRESS EQU H'0005'
D_A EQU H'0005'
DATA_ADDRESS EQU H'0005'
P EQU H'0004'
I2C_STOP EQU H'0004'
S EQU H'0003'
I2C_START EQU H'0003'
R EQU H'0002'
I2C_READ EQU H'0002'
NOT_W EQU H'0002'
NOT_WRITE EQU H'0002'
R_W EQU H'0002'
READ_WRITE EQU H'0002'
UA EQU H'0001'
BF EQU H'0000'

;----- TXSTA Bits ---------------------------------------------------------

CSRC EQU H'0007'
TX9 EQU H'0006'
NOT_TX8 EQU H'0006' ; Backward compatibility only
TX8_9 EQU H'0006' ; Backward compatibility only
TXEN EQU H'0005'
SYNC EQU H'0004'
BRGH EQU H'0002'
TRMT EQU H'0001'
TX9D EQU H'0000'
TXD8 EQU H'0000' ; Backward compatibility only


;----- CMCON Bits ---------------------------------------------------------
C2OUT EQU H'0007'
C1OUT EQU H'0006'
C2INV EQU H'0005'
C1INV EQU H'0004'
CIS EQU H'0003'
CM2 EQU H'0002'
CM1 EQU H'0001'
CM0 EQU H'0000'

;----- CVRCON Bits --------------------------------------------------------
CVREN EQU H'0007'
CVROE EQU H'0006'
CVRR EQU H'0005'
CVR3 EQU H'0003'
CVR2 EQU H'0002'
CVR1 EQU H'0001'
CVR0 EQU H'0000'

;----- ADCON1 Bits --------------------------------------------------------

ADFM EQU H'0007'
PCFG3 EQU H'0003'
PCFG2 EQU H'0002'
PCFG1 EQU H'0001'
PCFG0 EQU H'0000'

;----- EECON1 Bits --------------------------------------------------------

EEPGD EQU H'0007'
WRERR EQU H'0003'
WREN EQU H'0002'
WR EQU H'0001'
RD EQU H'0000'

;================================================= =========================
;
; RAM Definition
;
;================================================= =========================

__MAXRAM H'1FF'
__BADRAM H'8F'-H'90', H'95'-H'97', H'9A'-H'9B'
__BADRAM H'105', H'107'-H'109'
__BADRAM H'185', H'187'-H'189', H'18E'-H'18F'

;================================================= =========================
;
; Configuration Bits
;
;================================================= =========================

_CP_ALL EQU H'1FFF'
_CP_OFF EQU H'3FFF'
_DEBUG_OFF EQU H'3FFF'
_DEBUG_ON EQU H'37FF'
_WRT_OFF EQU H'3FFF' ; No prog memmory write protection
_WRT_256 EQU H'3DFF' ; First 256 prog memmory write protected
_WRT_1FOURTH EQU H'3BFF' ; First quarter prog memmory write protected
_WRT_HALF EQU H'39FF' ; First half memmory write protected
_CPD_OFF EQU H'3FFF'
_CPD_ON EQU H'3EFF'
_LVP_ON EQU H'3FFF'
_LVP_OFF EQU H'3F7F'
_BODEN_ON EQU H'3FFF'
_BODEN_OFF EQU H'3FBF'
_PWRTE_OFF EQU H'3FFF'
_PWRTE_ON EQU H'3FF7'
_WDT_ON EQU H'3FFF'
_WDT_OFF EQU H'3FFB'
_RC_OSC EQU H'3FFF'
_HS_OSC EQU H'3FFE'
_XT_OSC EQU H'3FFD'
_LP_OSC EQU H'3FFC'

LIST


;================================================= =========================
;
; Configuration
;
;================================================= =========================

;ENDE VOM *.INC FILE

__CONFIG _CP_OFF & _DEBUG_OFF & _LVP_OFF & _WRT_OFF & _PWRTE_ON & _WDT_OFF & _BODEN_OFF & _HS_OSC



;================================================= =========================
;
; Variable Definition
;
;================================================= =========================

wait EQU 0x20
loops2 EQU 0x22

; Anfangsinitialisierung

init
; PWM vorbereiten
; Vorteiler 16:1 und Timer2 einschalten
BSF T2CON,T2CKPS1 ; Vorteiler 16:1
BSF T2CON,TMR2ON ; Timer2 ein

; Frequenz auf 1,22 kHz einstellen
BSF STATUS,RP0 ; Bank1
MOVLW D'255' ;
MOVWF PR2 ; 1.22 kHz
BCF STATUS,RP0 ; Bank1

; Tastverhältnis auf 1% bzw 1% einstellen
MOVLW D'1'
MOVWF CCPR1L ; 1%
MOVLW D'1'
MOVWF CCPR2L ; 1%

; RC2/CCP1 und RC1/CCP2 auf Ausgang stellen
BSF STATUS,RP0 ; Bank1
BCF TRISC, 2 ; RC2: output=0
BCF TRISC, 1 ; RC1: 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 ;

; PWM MODE mit CCP2 initialisieren
CLRF CCP2CON ; CCP2-Modus aus
BSF CCP2CON,CCP2M3 ; CCP2-Modus PWM-Mode
BSF CCP2CON,CCP2M2 ;

; ADC vorbereiten
; PortB vorbereiten
bsf STATUS, RP0 ; auf Bank 1 umschalten
movlw B'00000000' ; PortB alle output
movwf TRISB
bcf STATUS, RP0 ; auf Bank 0 zurückschalten
clrf PORTB ; alle LEDs ausschalten

; ADC einschalten
BSF ADCON0, 0 ; ADON=1

; ADC speed für 20 MHz einstellen
BSF ADCON0, 7 ; ADCS1=1
BCF ADCON0, 6 ; ADCS0=0

; Daten linksbündig
BSF STATUS,RP0 ; Bank1
BCF ADCON1, 7 ; ADFM=0
BCF STATUS,RP0 ; Bank0


;************************************************* *********
; Hauptprogrammschleife

Main
; Ablauf für 1.PWM ausgang
; ADC-Eingang AN0 auswählen
BCF ADCON0, 5 ; ADCHS2=0
BCF ADCON0, 4 ; ADCHS1=0
BCF ADCON0, 3 ; ADCHS0=0

;Pause zum ADC aufladen?
;************************************************* *********
; Warteschleife 1 ms für einen 10MHz-PIC-Takt
Wai
movlw .249 ; Zeitkonstante für 1ms
movwf loops2

Wai2 nop
nop
nop
nop
nop
nop
nop
decfsz loops2, F ; 1 ms vorbei?
goto Wai2 ; nein, noch nicht



;Eingangsspannung wandeln
BSF ADCON0, 2 ; ADC starten
loop
BTFSC ADCON0, 2 ; ist der ADC fertig?
GOTO loop ; nein, weiter warten

; Wert nach PortB schreiben
movfw ADRESH ; obere 8 Bit auslesen
movwf PORTB ; obere 8 Bit nach PortB

; Wert an PWM1 übergeben
MOVWF CCPR1L ; obere 8 Bit sind PWM

; Warten, damit der ADC sich erholen kann
clrf wait
warten
DECFSZ wait, f
goto warten

; Ablauf für 2.PWM ausgang
; ADC-Eingang AN1 auswählen
BCF ADCON0, 5 ; ADCHS2=0
BCF ADCON0, 4 ; ADCHS1=0
BSF ADCON0, 3 ; ADCHS0=1

;Pause zum ADC aufladen?
;************************************************* *********
; Warteschleife 1 ms für einen 10MHz-PIC-Takt
Waii
movlw .249 ; Zeitkonstante für 1ms
movwf loops2

Wai3 nop
nop
nop
nop
nop
nop
nop
decfsz loops2, F ; 1 ms vorbei?
goto Wai3 ; nein, noch nicht

;Eingangsspannung wandeln
BSF ADCON0, 2 ; ADC starten
loop2
BTFSC ADCON0, 2 ; ist der ADC fertig?
GOTO loop2 ; nein, weiter warten

;Eingangsspannung in work laden
movfw ADRESH ; obere 8 Bit auslesen

; Wert an PWM2 übergeben
MOVWF CCPR2L ; obere 8 Bit sind PWM

; Warten, damit der ADC sich erholen kann
clrf wait
warten2
DECFSZ wait, f
goto warten2

goto Main

end



Passt das so?

Danke!

Edit: Noch bisschen den Text verschönert :-b

PICture
19.01.2007, 23:11
Ich sehe das ganze noch nicht klar. Hast Du jetzt 2 Potis (an welche Eigänge angeschlossen) und regelst PWM auf zwei Ausgängen (welchen) ?

Ohne dieser Daten kann ich Dein Code nicht analisieren und irgendeinen brauchbaren Fehler finden. :)

MfG

PsiQ
20.01.2007, 00:02
poti eingänge:
RA0/AN0 , 0-5V
RA1/AN1, 0-5V

Ausgänge PWM
CCP1
CCP2

O:)

auf nen anderen ausgang kann ich doch gar kein pwm geben, ohne software kniffe, oder ?

PICture
20.01.2007, 01:16
Das stimmt. Vielleicht bin ich schon müde.

Das einzige was ich bemerkt habe ist, das die Programmteile für CCP1 und CCP2 nicht identisch sind, da bei dem ersten schickst Du den ADC Wert ins PORTB und danach in den CCPR1 Register und bei dem zweiten nur in den CCPR2.

Ich würde das, was schon gut funktioniert hat, einfach noch mal unverändert kopieren und danach 1 auf 2 ändern.

Ich vermute also irgendeinen Software Fehler, glaube aber leider nicht, dass ich ihn finde. Ich habe bisher nur in meinen eigenen Programmen nach Fehler gesucht und sehr oft gefunden. :)

MfG

PsiQ
20.01.2007, 01:54
ja, ich schreib das nur einmal in den port b,
das zeigt dann das tastverhältnis von RA0 als leuchtende LEDs an..

wenn ich da RA1 auch noch reinschreibe, überschreibt sich das immer gegenseitig und sagt mir gar nix mehr ;-) *flimmer* :-)

guuuuut.. ich denke das was da bei den 20% springt ist mein meßgerät, wenn ichs nicht als tastverhältnis, sondern als spannung messe, gehts gleich auf 0Volt runter ;-)

jetzt noch die ansteuerung für die mosfets hinbekommen..siehe elektronik forum;-)

ich meld mich wenn der PIC explodiert ist ;-)

Danke!!

PsiQ
06.02.2007, 00:28
huhuu, ich bin mal wieder dran, kurze pause zwischen den klausuren.. verfeinern von software und hardware. :-s
Und da ich hier so freundlich betreut wurde *schäm* :oops:
Schaut mal einer da rein?
Probleme sind:
-Wert verdreifachen
-was tun bei über 5V
-wie auf low (ohne pwm) schalten wenn unter 0,1V
-wie auf high (ohne pwm) schalten wenn über 4,8V
Link:
https://www.roboternetz.de/phpBB2/viewtopic.php?p=251992#251992

Danke!