Ik heb een lichtcomputer van Velleman-kit, de k8044. Zie het schema en de link naar de manual hieronder.

http://lh3.ggpht.com/_mNJYgcJOhwY/SX9PC0wQJlI/AAAAAAAAGjE/Pf_nRJhK2HA/s1152/Schema%20Lichtcomputer.jpg
http://www.velleman.be/downloads/0/manual_k8044.pdf

Nu wil ik deze lichtcomputer van mijn eigen programma voorzien, ik wil er andere programma's inzetten dan die er standaard in staan.

In de lichtcomputer zit de microcontroller PIC16F627a-I/P. Ik wil nu zelf gaan programmeren met de PIC16F628a, die volgens mij alleen in geheugen verschilt met de originele PIC.

Voor het programmeren gebruik ik ProtonIDE, en als hulpmiddel heb ik www.picbasic.nl gebruikt.

Nu kom ik het volgende probleem tegen:
Om het programma van snelheid te kunnen laten veranderen, wordt er gebruik gemaakt van een potmeter.

Het lukt mij niet om in mijn programma de potmeter werkende te krijgen. In de cursus op picbasic.nl worden twee manieren uitgelegd om een potmeter uit te lezen, namelijk met POT() en met RCIN(). Ik heb beide manieren geprobeerd, maar het lukt niet. De variabele weerstand zit namelijk anders aangesloten dan in deze voorbeelden is gedaan (zie schema). Is er nog een andere functie om dit te doen? Of moet ik deze functies anders gebruiken? Wie kan mij helpen?

Ik wil de print niet wijzigen, ik wil echt proberen het probleem softwarematig op te lossen.

Wie weet wat ik verkeerd doe?

Het programma tot nu toe, met RCIN. De manier van aansluiten van RCIN lijkt namelijk het meeste op de manier die velleman gebruikt.

'****************************************************************
'*  Name    : Prog_06.bas                                       *
'*  Author  : Bastiaan van Dam & Esther Bron                    *
'*  Notice  : Copyright (c) 2008                                *
'*          : All Rights Reserved                               *
'*  Date    : 27-01-2009                                        *
'*  Version : 2.0                                               *
'*  Notes   : Programma voor Velleman lichtcomputer K8044       *
'*                                                              *
'****************************************************************
'* Ingangen  : A.2 SW1 (effect select +)                        *
'*           : A.3 SW2 (effect Select -)                        *
'*           : A.4 (max. ch. setup)                             *
'*           : A.7 (OSC 1) (speed selection)                    *
'* Uitgangen : A.0 (Ch. 09)                                     *
'*           : A.1 (Ch. 10)                                     *
'*           : B.0 (Ch. 01)                                     *
'*           : B.1 (Ch. 02)                                     *
'*           : B.2 (Ch. 03)                                     *
'*           : B.3 (Ch. 04)                                     *
'*           : B.4 (Ch. 05)                                     *
'*           : B.5 (Ch. 06)                                     *
'*           : B.6 (Ch. 07)                                     *
'*           : B.7 (Ch. 08)                                     *
'* Overig    : A.5 (Voeding +)                                  *
'*           : A.6 (Niet aangesloten)                           *
'*           : VDD (Voeding +)                                  *
'*           : VSS (Voeding -)                                  *
'****************************************************************

Device 16F628A                		      ;Gebruik een 16F628A type
Config INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
ALL_DIGITAL TRUE            		        ;Alle ingangen digitaal

;Poortnamen
Symbol VarW = PORTA.7                   ;variabele weerstand zit aan PORTA.7

;Variabele declareren   
Dim weerstand As Word                   ;Waarde weerstand       
Dim speed As Word                       ;Wachtijd 

PORTB_PULLUPS On                    		;On-chip pull-up weerstanden actief

Clear		  		                         	;Wis alle ram geheugen

;        76543210             
PORTA = %00000000                   		;Alle niveaus laag
TRISA = %11111100                   		;7-2 zijn ingangen, 1-0 uitgangen                 
PORTB = %00000000                   		;Alle niveaus laag
TRISB = %00000000                   		;7-0 zijn uitgangen                                        

Hoofdprogramma: 
;---------------------------------------------------
  Low PORTA.7                           ;Condensator ontladen
  DelayMS 1                             ;Even wachten zodat condensator helemaal leeg is
  weerstand = RCIn PORTA.7, Low         ;Geef RC oplaadtijd aan WORD variabele 'Weerstand'
  speed = weerstand                     ;De snelheid wordt bepaald door de weerstandswaarde
                                        ;(of de weerstandswaarde maal iets, experimenteel te bepalen)
  
;PROGRAMMA 1
	    ;------98                   Ledindicatie
    PORTA = %00000000
            ;76543210                   Ledindicatie
    PORTB = %00000001       
	  DelayMS speed   		             	  ;Wachttijd  
	    ;------98                   Ledindicatie
    PORTA = %00000000
            ;76543210                   Ledindicatie
    PORTB = %00000010       
	  DelayMS speed   		             	  ;Wachttijd
	    ;------98                   Ledindicatie
    PORTA = %00000000
            ;76543210                   Ledindicatie
    PORTB = %00000100       
	  DelayMS speed   		             	  ;Wachttijd
	    ;------98                   Ledindicatie
    PORTA = %00000000
            ;76543210                   Ledindicatie
    PORTB = %00001000       
	  DelayMS speed   		             	  ;Wachttijd
	    ;------98                   Ledindicatie
    PORTA = %00000000
            ;76543210                   Ledindicatie
    PORTB = %00010000       
	  DelayMS speed   		             	  ;Wachttijd
            ;------98                   Ledindicatie
    PORTA = %00000000
            ;76543210                   Ledindicatie
    PORTB = %00100000       
	  DelayMS speed   		             	  ;Wachttijd                                    	  
	    ;------98                   Ledindicatie
    PORTA = %00000000
            ;76543210                   Ledindicatie
    PORTB = %00100000       
	  DelayMS speed   		             	  ;Wachttijd
	    ;------98                   Ledindicatie
    PORTA = %00000000
            ;76543210                   Ledindicatie
    PORTB = %01000000       
	  DelayMS speed   		             	  ;Wachttijd
	    ;------98                   Ledindicatie
    PORTA = %00000000
            ;76543210                   Ledindicatie
    PORTB = %10000000       
	  DelayMS speed   		             	  ;Wachttijd
	    ;------98                   Ledindicatie
    PORTA = %00000001
            ;76543210                   Ledindicatie
    PORTB = %00000000       
	  DelayMS speed   		             	  ;Wachttijd
	    ;------98                   Ledindicatie
    PORTA = %00000010
            ;76543210                   Ledindicatie
    PORTB = %00000000       
	  DelayMS speed   		             	  ;Wachttijd
	  
	Clear speed 
  Clear weerstand 
	   	   
;---------------------------------------------------      	  
	
GoTo Hoofdprogramma

	
End

Dit programma is een looplicht. Als dit goed werkt wil ik het programma uit gaan breiden naar meerdere programma's.

[Bericht gewijzigd door Henry S. op (0%)]

Zo te zien beinvloed de schakeling van Velleman met de speedpotmeter de kloksnelheid van de PIC.

Potmeter regelt de snelheid van de PIC, ingesteld op gebruik van een externe RC combinatie, zie datasheet.

Gebruik ER_OSC_CLKOUT of ER_OSC_NOCLKOUT in je config.

Edit: Programma afgeslankt, ivm breedte.

[Bericht gewijzigd door Henry S. op (12%)]

Op 27 januari 2009 20:02:27 schreef Frits Kieftenbelt:
Zo te zien beinvloed de schakeling van Velleman met de speedpotmeter de kloksnelheid van de PIC.

Bedoelt u dat de potmeter de snelheid van de PIC regelt en niet de snelheid in het programma? Wat moet ik dan aanpassen in mijn programma om dat te kunnen gebruiken?

Ik zie hier inderdaad op het aansluitschema van de PIC dat ingang RA7 ook CLKIN is. Maar hoe zet ik dat in mijn programma?

Op 27 januari 2009 20:08:45 schreef B van Dam:
Bedoelt u dat de potmeter de snelheid van de PIC regelt en niet de snelheid in het programma?

Dat is onmogelijk, het ene hangt aan het andere.

Wat moet ik dan aanpassen in mijn programma om dat te kunnen gebruiken?
[...]
Maar hoe zet ik dat in mijn programma?

Klok instellen in de config, verder lees je A.7 niet uit ofzo.

Snelheid van je programma time door met een Delayms in de hoofdlus te experimenteren.

Op 27 januari 2009 20:06:51 schreef Henry S.:
Potmeter regelt de snelheid van de PIC, ingesteld op gebruik van een externe RC combinatie, zie datasheet.

Gebruik ER_OSC_CLKOUT of ER_OSC_NOCLKOUT in je config.

Edit: Programma afgeslankt, ivm breedte.

Ik heb beide commando's geprobeerd. Tenminste in de config gezet. Maar dan krijg ik bij het compileren een foutmelding: Invalid Fuse Settings. Wat betekent dit? Hoe los ik dit op? (Sorry, als ik domme vragen stel. Ik heb nog niet zoveel ervaring...)

Je kan natuurlijk zelf wat proberen op die POT of RCIN methode..

Pin laag maken, als ingang zetten, timer starten, en timer stoppen als de pin hoog wordt. Gezien dat nooit meer dan 1ms kan kosten bij elkaar kan je het waarschijnlijk nog wel ter plekke in een while loopje stoppen zonder dat je een timer nodig hebt. Je hebt toch geen interrupts die de timing kunnen verzieken.

Enne, heeft PICbasic geen Shift en Loop commando? Je kan dat hele hoofdprogramma in 10 regels herschrijven.

@Klein is fijn:
Inderdaad het is inderdaad makkelijker de shiftfunctie te gebruiken, bedankt voor de tip. Maar ik wil nu graag eerst het potmeterprobleem oplossen, daarna ga ik de shiftfuncite uitzoeken.

Ik heb in de datasheet inderdaad gelezen dat op de RA7 ingang de clockingang zit. Hierop kan een RC-circuit worden aangesloten voor de oscillatormode. Maar er staat niet hoe dat in de PIC geprogrammeerd kan worden. Henry S., jij zei dat ik hiervoor ER_OSC_CLKOUT of ER_OSC_NOCLKOUT kon gebruiken. Maar wat doen deze functies en hoe moet ik ze in het programma zetten? En met deze functies erin heb ik dat een looplicht waarvan de snelheid met een potmeter regelbaar is?

Op 27 januari 2009 20:28:03 schreef B van Dam:
[...]

Ik heb beide commando's geprobeerd. Tenminste in de config gezet. Maar dan krijg ik bij het compileren een foutmelding: Invalid Fuse Settings. Wat betekent dit? Hoe los ik dit op? (Sorry, als ik domme vragen stel. Ik heb nog niet zoveel ervaring...)

Dat betekent dat er een fout in je config zit, post die eens.

Op 27 januari 2009 21:30:13 schreef B van Dam:
Ik heb in de datasheet inderdaad gelezen dat op de RA7 ingang de clockingang zit. Hierop kan een RC-circuit worden aangesloten voor de oscillatormode. Maar er staat niet hoe dat in de PIC geprogrammeerd kan worden.

Datasheet 14.1 en 14.2.6

Henry S., jij zei dat ik hiervoor ER_OSC_CLKOUT of ER_OSC_NOCLKOUT kon gebruiken. Maar wat doen deze functies en hoe moet ik ze in het programma zetten?

Dat zet je in je config, net zoals je dat aangeeft als je een kristal gebruikt. ER_OSC_NOCLKOUT geeft aan dat je een externe RC gebruikt. Gebruik ER_OSC_NOCLKOUT want je hebt de clockout-pin nodig voor je looplicht.

En met deze functies erin heb ik dat een looplicht waarvan de snelheid met een potmeter regelbaar is?

Dat heb ik al gezegd toch?

@ Henry.S

Config ER_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF

Ik zag de fout al. Hij stond er dubbel in, dus is het goed zo?

Ik heb nu wel een volgend probleem. Als ik de Hex file op de PIC zet, krijg ik een 'error writing to PIC. Ik gebruik voor het programmeren van de PIC een Velleman kit K8076 met de bijbehorende software.

Dat is een correcte config, ik kan je helaas niet met de programmer helpen.

Welke error?

Mooi ik denkt dat het in de instellingen van de PIC programmeer zit ga me daar vanavond nog eens in verdiepen

De error melding is: error writing to PIC

zorg er voor dat die MCLR los is van het huidige ontwerp. Zet een weerstand van +/- 10k tussn de MCLR en VDD.
Het is ook beter om een jumper toe te voegen aan de PGD en PGC lijnen voor het ICSP-van de PIC.

Maar vooral die weerstand tussen MCLR en VDD is ERG belangrijk. Ten eerste als je nu die MCLR aan je programmer hangt krijgt de rest van je print een optater van 12V, dit vind de PIC zelf meestal niet fijn...

note: dit is alleen dus als je een ICSP gebruikt. Het is atm niet duidelijk welke programmer je gebruikt?

[Bericht gewijzigd door Daan Timmer op (12%)]

Op 28 januari 2009 07:48:04 schreef B van Dam:
De error melding is: error writing to PIC

Dat is niet een echt duidelijke melding. ;)

Op 28 januari 2009 10:51:06 schreef Daan Timmer:
Maar vooral die weerstand tussen MCLR en VDD is ERG belangrijk. Ten eerste als je nu die MCLR aan je programmer hangt krijgt de rest van je print een optater van 12V, dit vind de PIC zelf meestal niet fijn...

12-14V, echt niet fijn.

note: dit is alleen dus als je een ICSP gebruikt. Het is atm niet duidelijk welke programmer je gebruikt?

Plus software.

Even een paar dingen op een rijtje:

-Het programma schrijf ik in ProtonIDE, maak er een .hex file van.
-Met het programma PicProg2006 van Velleman en de programmer: Velleman kit K8076 schrijf ik het programma naar de PIC.

Device 16F628A                		      ;Gebruik een 16F628A type
Config ER_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
ALL_DIGITAL TRUE            		        ;Alle ingangen digitaal

;Constante waardes
Symbol Speed = 100                      ;Speed is 100Ms

PORTB_PULLUPS On                    		;On-chip pull-up weerstanden actief

Clear		  		                         	;Wis alle ram geheugen

;        76543210             
PORTA = %00000000                   		;Alle niveaus laag
TRISA = %11111100                   		;7-2 zijn ingangen, 1-0 uitgangen                 
PORTB = %00000000                   		;Alle niveaus laag
TRISB = %00000000                   		;7-0 zijn uitgangen                                        

Hoofdprogramma: 
;---------------------------------------------------
;PROGRAMMA 1
	  	      ;------98                   Ledindicatie
	  PORTA = %00000000
            ;76543210                   Ledindicatie
    PORTB = %00000001       
	  DelayMS Speed   		             	  ;Wachttijd  
	  	      ;------98                   Ledindicatie
	  PORTA = %00000000
            ;76543210                   Ledindicatie
    PORTB = %00000010       
	  DelayMS Speed   		             	  ;Wachttijd
	  	      ;------98                   Ledindicatie
	  PORTA = %00000000
            ;76543210                   Ledindicatie
    PORTB = %00000100       
	  DelayMS Speed   		             	  ;Wachttijd
	  	      ;------98                   Ledindicatie
	  PORTA = %00000000
            ;76543210                   Ledindicatie
    PORTB = %00001000       
	  DelayMS Speed   		             	  ;Wachttijd
	  	      ;------98                   Ledindicatie
	  PORTA = %00000000
            ;76543210                   Ledindicatie
    PORTB = %00010000       
	  DelayMS Speed   		             	  ;Wachttijd
            ;------98                   Ledindicatie
	  PORTA = %00000000
            ;76543210                   Ledindicatie
    PORTB = %00100000       
	  DelayMS Speed   		             	  ;Wachttijd                                    	  
	  	      ;------98                   Ledindicatie
	  PORTA = %00000000
            ;76543210                   Ledindicatie
    PORTB = %00100000       
	  DelayMS Speed   		             	  ;Wachttijd
	  	      ;------98                   Ledindicatie
	  PORTA = %00000000
            ;76543210                   Ledindicatie
    PORTB = %01000000       
	  DelayMS Speed   		             	  ;Wachttijd
	  	      ;------98                   Ledindicatie
	  PORTA = %00000000
            ;76543210                   Ledindicatie
    PORTB = %10000000       
	  DelayMS Speed   		             	  ;Wachttijd
	  	      ;------98                   Ledindicatie
	  PORTA = %00000001
            ;76543210                   Ledindicatie
    PORTB = %00000000       
	  DelayMS Speed   		             	  ;Wachttijd
	  	      ;------98                   Ledindicatie
	  PORTA = %00000010
            ;76543210                   Ledindicatie
    PORTB = %00000000       
	  DelayMS Speed   		             	  ;Wachttijd
	     	   
;---------------------------------------------------      	  
	
GoTo Hoofdprogramma

	
End

-PicProg2006 geeft bij het schrijven naar de PIC een foutmelding.

Het is gelukt !!!

De fout in de PIC progammer zat in de configuration instellingen:

http://lh4.ggpht.com/_mNJYgcJOhwY/SYCh9QoaHpI/AAAAAAAAGjM/8UYRpnCNIoo/PICProg2006.jpg

De Osc moest namelijk ingesteld worden op 111 (ER_CLK_Osc), maar bij het inladen van de hexfile werd dit automatisch teruggezet naar 000. Nu heb ik de code protecton off gezet, waardoor het wel lukt. Is dit een goede oplossing?

Bedankt voor de hulp!

Nu wil mijn programma nog efficienter gaan schrijven, meerdere programma's erin zetten en tussen deze programma's kunnen wisselen door middel van druktoetsen. Hier kom ik later nog op terug, tips zijn welkom!

Op 28 januari 2009 19:31:31 schreef B van Dam:
Het is gelukt !!!

De fout in de PIC progammer zat in de configuration instellingen:

[afbeelding]

De Osc moest namelijk ingesteld worden op 111 (ER_CLK_Osc), maar bij het inladen van de hexfile werd dit automatisch teruggezet naar 000. Nu heb ik de code protecton off gezet, waardoor het wel lukt. Is dit een goede oplossing?

Jazeker en goede oplossing, slechte programmer, hoort van je configs af te blijven.

tips zijn welkom!

Speed = 100, 100ms zeg jij, maar de tijd is nu natuurlijk afhankelijk van de RC.
Werkt het regelen nu ook?

@Efficientie: Begin eens met het shiften van Poort B0-B7 in een While lus.

De afbeelding is niet zichtbaar, gebruik http://www.uploadarchief.net/overview.html

@Henry

De speed 100ms was nog van het oude programma. Na wat testen bleek dat als ik voor speed 10 gebruikt, dat dan de snelheid ideaal te regelen is. echt geweldig !!

En van de efficiëntie daar ga ik nu eens mee aan de slag.
De enigste kennis van de micro controllers heb ik uit de cursus van PIC Basic dus nog genoeg te leren.

Nogmaals bedankt voor de informatie.

Op 27 januari 2009 20:02:27 schreef Frits Kieftenbelt:
Zo te zien beinvloed de schakeling van Velleman met de speedpotmeter de kloksnelheid van de PIC.

GAT-VER-DAMME!

Nu heb ik in de Velleman kitjes wel eens wat "onelegante" constructies gezien, en ook genoeg kitjes waar eigenlijk weinig op aan te merken is, maar dit is wel een hele smerige oplossing!

Een R/C kring waarvan de frequentie of periode geteld wordt lijkt me een stuk netter, of als je het echt fancy wilt maken, de PWM uitgang gebruiken met een R/C filter als referentie voor de analoge comparator.