al weer een tijdje geleden begonnnen met een RGB led dimmer te bouwen die ik elders op het net heb gevonden(link komt nog)
naar het succes van het nabouwen van die dimmer ben ik begonnnen met men eigen versie

met 2 eisen de pc kant moet kunnen worden gedaan in Visual Basic of in Visual C(das geen probleem)
de pic kant gebeurt in Basic(crownhill proton picbasic+)

nu ben ik van plan om een programma uit te laten voeren en door interupt op PIE1.5(interrupt op usart receive buffer)

nu is mijn vraag gaat dit werken:


device 16F628a               ;gebruikte µcontroller
';****************************************************************
';*   A.2,AN2,Vref  1 _|  ^  |_ 18 A.1,AN1                       *
';*   A.3,AN3,cmp1  2 _|     |_ 17 A.0,AN0                       *
';*   A.4,AN4,cmp2  3 _|     |_ 16 A.7,clckin,osc1               *
';*   A.5,mclre,vpp 4 _|     |_ 15 A.6,clkout,osc2               *
';*   gnd           5 _|     |_ 14 vdd                           *
';*   B.0,INT       6 _|     |_ 13 B.7,PGD,T1OSI                 *
';*   B.1,RX,DT     7 _|     |_ 12 B.6,PGC,T1OSO,T1CKI           *
';*   B.2,TX,CK     8 _|     |_ 11 B.5,                          *
';*   B.3,CCP1      9 _|     |_ 10 B.4,PGM                       *
';*                    |_____|                                   *
';****************************************************************

config intrc_osc_noclkout, wdt_off, lvp_off, mclre_on, pwrte_on,

;nu nog wat gezeik met registervermeldingen

;een berg decleraties                         
all_digital true                ;alle poorten zijn digitale poorten
serial_baud 2400                ;de baudrate voor de seriële poort is op 57600 gezet
HSERIAL_RCSTA %10010000                                
HSERIAL_TXSTA %00100000                                
enable interrupt
on interrupt goto  instellen    
;poorten
;76543210                                                         
trisa = %00000000               ;hier staat dus welke A-poorten ingangen zijn (1 is ingang)
trisb = %00010000               ;hier staat dus welke B-poorten ingangen zijn (1 is ingang)          
portb = %00000010               ;hier staat welke poorten standaard hoog zijn.

symbol led       = portb.4      ;dit geeft aan op welke poort de controle led zit. en de poort heeft nu een naam
symbol rgb1      = portb.0            
symbol rgb2      = portb.1
symbol rgb3      = portb.2
dim prgb1 as byte
dim prgb2 as byte
dim prgb3 as byte
clear                           ;wis alle ramgeheugen  

;-------------------------------------------------------------------------------------------------------------------------------------------;
;hoofdprogramma
while 1=1                                   ;dit is een oneindige lus totdat we er uit springen
    pwm rgb1, prgb1, 20
    pwm rgb2, prgb2, 20
    pwm rgb3, prgb3, 20
wend                                        ;begin opnieuw met deze lus

instellen:
    prgb = rcreg
    clear rcreg
    hrsout "C2"
    pie1.5 = 0
        while(pie1.5 = 0)
        wend
    prgb = rcreg
    clear rcreg
    hrsout "c1"
    pie1.5 = 0
        while(Pie1.5 = 0)
        wend
    prgb3 = rcreg
    clear rcreg
    hrsout "CC"
    pie1.5 = 0
return
end                                         ;einde van het programma 

en nee het programma is nog niet af maar je kan beter nu er achter komen dat er nix van klopt dan als je alles af hebt

dus ik zou graag willen weten of het programma tot nu toe zou werken ik kan het helaas niet testen want men programmer ligt op zijn rug(doet dus nix meer)

hopelijk kunnen jullie me verder helpen met commentaar

de lamp bouw ik samen een collega(of althans hij si voor hem)

alvast bedankt

/edit
ik bedoelde dus deze link: http://home.versatel.nl/edithenwilliam/william.htm

[Bericht gewijzigd door timmie op ]

even het volledige programma ingevoegd in de startpost

maar kan iemand me verder helpen?

ik zit op het moment namelijk zonder programmer

Werkt voor geen meter.

Waar is je on_interrupt statement ?
Waar is de interrupt zelf ?

Theo

programma is aangepast zie hierboven hopelijk werkt deze nu wel

Nope, het blijft een frommelprogramma.
Probeer er eens wat structuur in te brengen.
Met softwarematige pwm trek je het uberhaubt niet.
Ik heb het een keer gedaan met een 16f628, maar het is een hell of a job.
Koop liever een dedicated chippie ervoor.
Er is al iets met 4 afzonderlijke pwm-kanalen.
Gewoon met I²C de info erin proppen, en het chippie gaat wel.

Theo

om hier maar eens een schop tegen te geven

ik ben bezig met het pcprogramma van de rgbdimmer
nu zit ik met het probleem dat ik de waarde die tussen 0 en 255 ligt in een enkele byte over de rs232 moet versturen alleen kan VB niet overweg met deze lijn

serialport1.write(trackbar1.value)

als ik de waarde naar ascii zou converteren dan ga ik niet verder geraken dan 127

hoe kan ik dit probleem oplossen

VB kan echt wel een 255 uitsturen hoor.
Maar dit is verder offtopic.
Hint: doe iets met binair...

dit is niet of topic ik vraag toch gericht naar een oplossing voor het aansturen van mijn RGB led
mijn intentie was altijd al om die via de rs232 poort in te stellen

maar hoe moet ik dat dan binair doen?

ik gebruik de standaard module die in M$ VB zit

kan iemand mij helpen met het verzenden van de decimale waardes hoger dan 127(dus in extendend ascii)?

ik geraak er echt neit uit er wordt geprogrammeerd in M$ Visual Basic

niemand die een idee heeft?

in mijn zoektocht naar een mogelijkheid om niet al te moeilijk toch een rgb led aan te sturen ben ik nu bezig met een andere pic puur omdat deze 3 ccp poorten heeft.

echter werkt het niet(testprogramma)

dit is de source



	list P=16F767
	#include <p16F767.inc>
	

	__config	_CONFIG1, _CP_OFF & _CCP2_RB3 & _DEBUG_OFF & _BOREN_0 & _MCLR_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC
	__config 	_CONFIG2,  _BORSEN_0 & _IESO_OFF & _FCMEN_OFF

	ORG	0000h
	goto INITC

	ORG	0005h
;INITIALISATIE VAN DE PROCESSOR
;INSTELLEN VAN DE POORTEN
INITC	BCF	STATUS, RP0
		BCF	STATUS, RP1	;GA NAAAR BANK0

	CLRF	PORTA	;STEL PORTA IN ZODAT ALLE A-POORTEN LAAG ZIJN
	CLRF	PORTB	;STEL PORTB IN ZODAT ALLE B-POORTEN LAAG ZIJN
	CLRF	PORTC	;STEL PORTC IN ZODAT ALLE C-POORTEN LAAG ZIJN
	CLRF	PORTE	;STEL PORTE IN ZODAT ALLE E-POORTEN LAAG ZIJN
	clrf	T2CON
	BSF	STATUS, RP1	;GA NAAR BANK1

	MOVLW	B'01111111'
	MOVWF	TRISA	;STEL TRISA IN ZODAT A-POORTEN INGANG ZIJN

	CLRF	TRISB	;STEL TRISB IN ZODAT B-POORTEN UITGANG ZIJN
	CLRF	TRISC	;STEL TRISC IN ZODAT C-POORTEN UITGANG ZIJN
	CLRF	TRISE	;STEL TRISE IN ZODAT E-POORTEN UITGANG ZIJN

;INSTELLEN VAN DE AD-CONVERTOREN
	BCF	STATUS, RP1	;GA TERUG NAAR BANK0

	MOVLW	B'00000001'
	MOVWF	ADCON0	;STEL REGISTER ADCON0 IN

	MOVLW	B'00001100'
	MOVWF	ADCON1	;STEL REGISTER ADCON1 IN

	MOVLW	B'00001000'
	MOVWF	ADCON2	;STEL REGISTER ADCON2 IN

;INSTELLEN VAN DE CCP-MODULE'S
;HIER CONFIGUREREN WE ONZE PWMMODUELE
	MOVLW	B'00001100'
	MOVWF	CCP1CON	;STEL CCP1CON REGISTER IN ZODAT PWM1-MODULE ACTIEF IS
	
	MOVLW	B'00001100'
	MOVWF	CCP2CON	;STEL CCP2CON REGISTER IN ZODAT PWM2-MODULE ACTIEF IS

	BSF	STATUS,RP1	;BANK1

	MOVLW	B'00001100'
	MOVWF	CCP3CON	;STEL CCP3CON REGISTER IN ZODAT PWM3-MODULE ACTIEF IS

	MOVLW	03Fh
	MOVWF	92h	;STEL DE FREKWENTIE VAN DE PWM MODULE IN 
;INSTELLEN VAN DE USART
;HIER CONFIGUREREN WE ONZE LINK MET DE COMPUTER
;2400 BAUD GEEN PARITEIT 8 BITS CONTINU ONTVANGST ENABLED

	MOVLW	B'10000010'
	MOVWF	TXSTA	;STEL TXSTA REGISTER IN

	BCF	STATUS,	RP1	;BANK0

	MOVLW	B'10010000'
	MOVWF	RCSTA	;STEL RCSTA REGISTER IN

	BSF	STATUS,	RP1	;BANK1

	MOVLW	B'10000001'
	MOVWF	SPBRG	;STEL SPBRG IN ZODAT DE BAUDRATE UITKOMT OP 2400 BAUD

	BCF STATUS, RP1	;BANK0
;ENTRYPOINT VAN HET PROGRAMMA
;WE GAAN EEN RGB LED AANSTUREN MET DE 3 HARDWARE PWM KANALEN VAN DE PIC
;WE MAKEN HET MOGELIJK OM IN 2 MODI TE WERKEN NAMELIJK MET 3 POTMETERS OP DE AD KANALEN EN VIA DE PC



;MAIN PROGRAMMA
	
TEST			bcf	T2CON, TMR2ON			
			movlw	B'00001111'		;stel een byte in
			movwf	CCPR1L			;stel de buffer in
			BSF		T2CON,	TMR2ON
			goto	TEST

			END

hopelijk kan iemand me helpen

de vraag is dan ook waarom werkt dit programma niet?

TEST bcf T2CON, TMR2ON
movlw B'00001111' ;stel een byte in
movwf CCPR1L ;stel de buffer in
BSF T2CON, TMR2ON
goto TEST

END

Hier zet je telkens Timer2 aan en uit. Dat is niet de bedoeling. Timer2 wordt aangezet en blijft daarna doordraaien.

oke nou even getest ik heb nu tmr2 aan gezet en aan laten staan maar er is geen vershil:( heelaas

Ik ben op dit moment ook bezig met een RGB led dimproject, en heb een leuk printje hiervoor gemaakt:

http://img228.imageshack.us/img228/5879/p1010002dm0.th.jpg

http://img228.imageshack.us/img228/4129/p1010003jh4.th.jpg

Alle 16 RGB leds zijn onafhankelijk van elkaar te sturen in kleur, en in helderheid. Het is bedoeld voor verlichte knoppen te maken, zoals in mijn testopstelling:

http://img228.imageshack.us/img228/8304/p1010004vd9.th.jpg

Ik gebruik 64 waarden voor PWM te sturen voor elk van de kleuren (rood, groen en blauw). Voor de laatste heb ik wit proberen te maken door alle 3 de kleuren aan te sturen.

Ik heb nog zo'n printje liggen, dus als je intresse hebt, dan mail je me maar. De PIC die ik gebruik is een 16F648A, maar de print was bedoeld voor een 16F819, die heeft namelijk een I2C bus in plaats van een seriele poort. Ook de waarden van de buttons kan ik uitlezen, en over I2C sturen. Op deze manier kun je dit printje inzetten in een groter project.

ziet er goed uit dweil.

wat gebruikte je voor die PWM? een dedicated chip of softwarematige PWM ?

ik vermoed dedicated ivm i2c ;)

zoja, welke chip?

inderdaad ziet er strak uit

ook bedankt voor hte aanbod alleen heb ik alles al liggen maar wil de pic zijn werk neit doen.

Ik gebuik gewoon softwarematige PWM, die ik door middel van een schuifregister principe naar buiten stuur. De 4 overige chips (Altera EPM7032STC44) zijn gemakzucht van mij omdat ik een 74HC595 te moeilijk routen vind. Op deze manier kan ik de print heel eenvoudig houden terwijl er maar 1 data, 1 clock en 1 latch signaal voor naar alle leds gaan.

Op 8 juli 2007 10:49:25 schreef timmie:
oke nou even getest ik heb nu tmr2 aan gezet en aan laten staan maar er is geen vershil:( heelaas

Met de simulator van MPLAB kun je de fout er vast uithalen.
Door de registers in de gaten te houden tijdens simuleren kun je zien waar het fout gaat.

ik heb een sim gedraaid in mplab en alles gaat zover ik kan beoordelen alleen word er geen waarde naar PR2 geshcreven het timer2 periode register de rest wel ook ccp1h dus de pwm module en timer 2 werken wel samen

Waarom wordt PR2 niet geschreven? Je bank staat goed op bank1....misschien toch controleren of je op dat moment echt in bank1 zit.

Nee dus..... je set RP1 en dus ga je naar bank2!
Je moet RP0 setten.

inderdaad beetje stomme fout zou ook nie weten hoe ik daarbij ben gekomen

wel wat vordering naar de aanpassing van zonnepaneeltje

op ccp2 krijg ik een blokgolf van iets meer dan 60Khz met een duty van 50% helaas doet hij nog steeds men programma niet uitvoeren

Welk programma? :)
Je hebt alleen nog maar een paar instellingen gemaakt :D
En je PWM draait toch....

oke zover je het een programma kan noemen(testprogramma)

ja de pwm doet het kanaal 2 en niet kanaal 1 zo als de bedoeling is

tevens klopt de duty ook niet

[Bericht gewijzigd door timmie op (12%)]