Tonen generen met PIC16F628A

Lambiek

Special Member

Heb je proton lite, dan is het te groot ja. En als je bijv. de laatste vier songs weg haalt?

MGP heeft er een hex file van gemaakt, misschien kun je die gebruiken?

Als je haar maar goed zit, GROETEN LAMBIEK.

Als je al die symbols weglaat, en de waardes direct inklopt, wordt de code al 36 regels korter...
Of Mikrobasic gebruiken, in demomode 4k code toegestaan...

Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com

Op 27 juli 2019 15:52:33 schreef Bavelt:
Ik zie dat deze configuratie een kristal van 10Mhz verlangt. Die heb ik even niet.

Wel eentje van 20Mhz en een heleboel van 32.768 Khz
Kunnen die ook worden gebruikt?

Dan moet er vast eea worden gewijzigd in de frequenties?

Of wellicht even voor de test met interne oscillator?

Lambiek

Special Member

Op 27 juli 2019 16:15:47 schreef Bavelt:
Of wellicht even voor de test met interne oscillator?

Dat kan, maar daar wordt je code niet korter van. :)

Als je haar maar goed zit, GROETEN LAMBIEK.

Tellen symbols dan niet mee als regel?

Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com
Lambiek

Special Member

Op 27 juli 2019 16:21:01 schreef Arco:
Tellen symbols dan niet mee als regel?

Ja natuurlijk, maar ik had het tegen de TS. Die wil de interne klok gebruiken in plaats van het kristal.

Ik heb hier de hex file wel, maar ik krijg hem niet gekopieerd.

Als je haar maar goed zit, GROETEN LAMBIEK.

Op 27 juli 2019 15:58:03 schreef Bavelt:
Proton Lite error: max 50 lines

Maak er dan 1 song van ;)

[Bericht gewijzigd door MGP op 27 juli 2019 16:37:44 (72%)]

LDmicro user.
Lambiek

Special Member

Ik heb het uit de pickit2 gehaald, is alleen voor een 16F627A. De 16f628A heb ik niet, maar misschien kun je er iets mee.

Hex file.

code:


000	28C5	3080	00A1	30FE	2058	3001	2058	3075
008	00A5	3030	28AD	00AB	1106	1186	1683	1106
010	1186	300F	0586	1283	082B	18A0	2835	303E
018	00A5	3080	20AD	3033	00AA	2049	3013	00A5
020	3088	20AD	2049	3064	20AC	2049	3064	20AC
028	3022	00AA	2049	3028	2034	300C	2034	3006
030	2034	14A0	082B	2835	1420	00AA	1C20	2843
038	1186	3C03	1C03	2848	2048	3007	00A5	30D0
040	20AD	1403	0008	1420	3CFE	1903	2856	1586
048	1C20	1020	1506	300F	0586	082A	39F0	0486
050	1106	0EAA	1820	2849	3032	20AC	082B	28C1
058	1BA1	280B	0008	00A7	0822	0084	0923	1784
060	0580	1384	08A7	1903	2884	30F0	00A9	0826
068	3880	00A8	30F0	03A9	1903	00A9	1903	03A7
070	1903	2884	301B	20AC	208F	0103	182C	0823
078	1FA6	0823	08A6	1903	0103	0FA8	2881	0680
080	2867	2882	0000	286A	0823	1784	0480	28C1
088	1783	0180	0A84	3EFF	1D03	2889	28C1	082D
090	042C	1903	0AAC	3080	1A2C	06AD	192C	06AD
098	18AC	06AD	0D2D	0DAC	0DAD	082C	28C1	01A7
0A0	00A6	30FF	07A6	1C03	07A7	1C03	28C1	3003
0A8	00A5	30E4	20AD	28A1	01A5	3EF6	00A4	09A5
0B0	1C03	28B8	30FE	0000	07A4	1803	28B3	07A4
0B8	0000	0FA5	28B2	0000	1824	28BE	1824	28C0
0C0	0008	1383	1283	1303	0008	0183	01A0	3007
0C8	009F	3020	0084	3060	2089	30A0	0084	3050
0D0	2089	3020	0084	3030	2088	2001	3001	00A7
0D8	30F4	20A0	3020	0084	3060	2089	30A0	0084
0E0	3050	2089	3020	0084	3030	2088	0185	303F
0E8	1683	0085	1283	0186	1683	0186	1283	1805
0F0	28F2	28EE	3006	00A2	3001	00A3	3061	00A6
0F8	3050	205B	306C	00A6	3050	205B	3069	00A6
100	3014	205B	3068	00A6	3014	205B	3065	00A6
108	3014	205B	3071	00A6	3050	205B	306C	00A6
110	3050	205B	3069	00A6	3014	205B	3068	00A6
118	3014	205B	3065	00A6	3014	205B	3071	00A6
120	3050	205B	306C	00A6	3050	205B	3069	00A6
128	3014	205B	3068	00A6	3014	205B	3069	00A6
130	3014	205B	3065	00A6	3050	205B	3003	00A7
138	30E8	20A0	293B	3006	00A2	3001	00A3	305E
140	00A6	3050	205B	01A6	3002	205B	305E	00A6
148	3046	205B	01A6	3002	205B	305E	00A6	300A
150	205B	01A6	3002	205B	305E	00A6	3050	205B
158	3063	00A6	303C	205B	01A6	3002	205B	3061
160	00A6	300A	205B	01A6	3002	205B	3061	00A6
168	303C	205B	01A6	3005	205B	305E	00A6	300A
170	205B	01A6	3002	205B	305E	00A6	3032	205B
178	01A6	3002	205B	305C	00A6	3014	205B	01A6
180	3001	205B	305E	00A6	3028	205B	3003	00A7
188	30E8	20A0	298B	3006	00A2	3001	00A3	306F
190	00A6	3028	205B	01A6	3002	205B	3069	00A6
198	3014	205B	01A6	3002	205B	3069	00A6	3014
1A0	205B	01A6	3005	205B	306C	00A6	3032	205B
1A8	01A6	3003	205B	3069	00A6	301E	205B	01A6
1B0	3028	205B	306E	00A6	3028	205B	306F	00A6
1B8	3032	205B	3003	00A7	30E8	20A0	29BF	3006
1C0	00A2	3001	00A3	306A	00A6	3014	205B	3070
1C8	00A6	3014	205B	3073	00A6	300F	205B	3075
1D0	00A6	301E	205B	01A6	3005	205B	3073	00A6
1D8	3014	205B	3075	00A6	304B	205B	3003	00A7
1E0	30E8	20A0	29E3	3006	00A2	3001	00A3	3069
1E8	00A6	301E	205B	01A6	300A	205B	3069	00A6
1F0	301E	205B	01A6	300A	205B	3069	00A6	3050
1F8	205B	01A6	3003	205B	3069	00A6	3014	205B
200	3068	00A6	301E	205B	3065	00A6	3014	205B
208	3068	00A6	301E	205B	3069	00A6	3014	205B
210	306C	00A6	301E	205B	01A6	3005	205B	3069
218	00A6	300A	205B	306E	00A6	301E	205B	01A6
220	300F	205B	306E	00A6	301E	205B	01A6	300F
228	205B	306E	00A6	3050	205B	3003	00A7	30E8
230	20A0	28EE	2A32	2A33	3FFF	3FFF	3FFF	3FFF
238	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF
240	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF
248	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF
250	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF
258	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF
260	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF
268	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF
270	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF
278	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF
280	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF
288	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF
290	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF
298	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF
2A0	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF
2A8	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF
2B0	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF
2B8	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF
2C0	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF
2C8	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF
2D0	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF
2D8	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF
2E0	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF
2E8	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF
2F0	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF
2F8	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF
300	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF
308	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF
310	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF
318	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF
320	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF
328	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF
330	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF
338	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF
340	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF
348	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF
350	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF
358	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF
360	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF
368	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF
370	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF
378	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF
380	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF
388	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF
390	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF
398	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF
3A0	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF
3A8	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF
3B0	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF
3B8	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF
3C0	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF
3C8	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF
3D0	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF
3D8	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF
3E0	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF
3E8	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF
3F0	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF
3F8	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF	3FFF
Als je haar maar goed zit, GROETEN LAMBIEK.

Hier heb je <50 lines met 1 song om te testen en met internal oscillator

Hopelijk staan er geen fouten bij de interne oscillator aanwijzing en je kunt altijd nog symbolen wissen, noten die in die song niet gebruikt worden.

LDmicro user.

Zo zit je ook ruim onder de 50 (zonder symbols)

code:

Device 16F628A                         ; Processor type
Xtal 10                                ; Cristal 10Mhz

Config HS_OSC, WDT_OFF, PWRTE_ON, MCLRE_OFF, BODEN_OFF, LVP_OFF, CP_OFF                          
All_Digital true                       ; Alle poorten digitaal
DelayMS 500                            ; Pauze 0.5 sec 
Clear                                  ; Wis geheugen

PORTA  = %000000                       ; Maak poort A laag
TRISA  = %111111                       ; Poort_A I/O
PORTB  = %000000                       ; Maak poort B laag
TRISB  = %000000                       ; Poort_B I/O

;------------------------------------------------------------------------------------------------------
; SONG1:STARWARS, SONG2:DEATH MARCH, SONG3:SHAVE AND A HAIRCUT, SONG4:CHARGE, SONG5:HEART AND SOUL
;------------------------------------------------------------------------------------------------------

START:	
    If PORTA.0 = 1 Then GoTo SONG1
    GoTo START
        
SONG1:	 
   Sound PORTB.0,[97,80,108,80,105,20,104,20,101,20,113,80,108,80,105,20,104,20,101,20,113,80,108,80,105,20,104,20,105,20,101,80]
    DelayMS 1000
    GoTo SONG2
				
SONG2:	
    Sound PORTB.0,[94,80,0,2,94,70,0,2,94,10,0,2,94,80,99,60,0,2,97,10,0,2,97,60,0,5,94,10,0,2,94,50,0,2,92,20,0,1,94,40]
    DelayMS 1000
    GoTo SONG3
		
SONG3:	
    Sound PORTB.0,[111,40,0,2,105,20,0,2,105,20,0,5,108,50,0,3,105,30,0,40,110,40,111,50]
    DelayMS 1000
    GoTo SONG4
				
SONG4:	
    Sound PORTB.0,[106,20,112,20,115,15,117,30,0,5,115,20,117,75]
    DelayMS 1000
    GoTo SONG5
			
SONG5:	
    Sound PORTB.0,[105,30,0,10,105,30,0,10,105,80,0,3,105,20,104,30,101,20,104,30,105,20,108,30,0,5,105,10,110,30,0,15,110,30,0,15,110,80]
    DelayMS 1000
    GoTo START
End
Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com

Het werkt! Zij het dat het outputsignaal tamelijk zwak is, maar dat zal vast ook wel zijn in te stellen.
In het oorspronkelijke programma kwam er met een tor als versterker een goed signaal uit het luidsprekertje.

Even een klein uitstapje (wellicht ander topic):
Ik moet iedere keer als ik MPLAB iDE start de checkbox
"Power Circuit from tool" aanvinken. Anders werkt het niet met PICkit 3.

Ik heb daarop gezocht en een 'user environment' aangemaakt, deze laadt bij starten MPLAB, maar de checkbox blijft uitgevinkt.
Dus opnieuw aanvinken steeds.

Hierdoor kan ik niet rechtstreeks vanuit Proton Compileren én programmeren maar moet het steeds apart. Kan natuurlijk wel, maar is niet handig.
Wellicht een tip?

Op 28 juli 2019 15:13:36 schreef Bavelt:
Het werkt! Zij het dat het outputsignaal tamelijk zwak is, maar dat zal vast ook wel zijn in te stellen.
In het oorspronkelijke programma kwam er met een tor als versterker een goed signaal uit het luidsprekertje.

Altijd een tor gebruiken zoals in uw eerste schema dan speelt de impedantie van de luidspreker niet zo'n grote rol, mogelijks is de stroom hoger dan toegelaten van de pic outputpin zonder tor.

Ik gebruik het standalone Pickit2 programma en moet daardoor ook 2 handelingen verrichten, maar als beiden open staan is dat niet zo'n probleem voor mij.

LDmicro user.

Ik gebruik het standalone Pickit2 programma en moet daardoor ook 2 handelingen verrichten...

Hoeft niet, kan simpeler:
- met toets op pickit2 zelf, of
- Auto import hex + Write device functie

Bij de laatste optie hoef je zelfs helemaal niks te doen. Als je de file compileert, wordt de hexfile automatisch geladen en geprogrammeerd...

Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com

Ik wist niet dat de nieuwe hexfile automatisch wordt ingeladen, maar ik gebruik die niet zoveel, gebruik nog veel de Wisp programmer.
Die laatste heeft wel moeite om een 16F88 te programmeren dan wordt de pickit gebruikt.

LDmicro user.

Als je alleen de 'Write' toets drukt in het Pickit programma wordt de hexfile ook automatisch ingeladen (indien er een nieuwere beschikbaar is)

Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com

De volgende keer ga ik erop letten of dat idd zo is, zou wel makkelijk zijn ;)

LDmicro user.

Soms kun je zo heerlijk over dingen heen kijken...

Waarom blijft onderstaand programma het geluid produceren (Sound instructie) onafhankelijk van de waarde van S1, terwijl die wél in de voorwaarde is opgenomen?

DEVICE 16F628A ; Processor type
CONFIG INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
XTAL 4
ALL_DIGITAL true ; Alle poorten digitaal
SYMBOL PIN = PORTB.0 ; Sound - pin
SYMBOL S1 = PORTA.0 ; Schakelaar
SYMBOL R = 0
SYMBOL C = 82
SYMBOL Db0 = 85
SYMBOL D = 87
SYMBOL Eb = 89
SYMBOL E = 92
SYMBOL F = 94
SYMBOL Gb = 95
SYMBOL G = 97
SYMBOL Ab1 = 99
SYMBOL A1 = 73
SYMBOL Bb1 = 76
SYMBOL BE1 = 79
SYMBOL C1 = 82
SYMBOL Db1 = 85
SYMBOL D1 = 87
SYMBOL Eb1 = 89
SYMBOL E1 = 92
SYMBOL F1 = 94
SYMBOL Gb1 = 95
SYMBOL G1 = 97
SYMBOL Ab2 = 99
SYMBOL A2 = 101
SYMBOL Bb2 = 102
SYMBOL BE2 = 104
SYMBOL C2 = 105
SYMBOL D2 = 108
SYMBOL E2 = 110
SYMBOL F2 = 111
SYMBOL Gb2 = 112
SYMBOL G2 = 113
SYMBOL Bm3 = 116
SYMBOL C3 = 117
SYMBOL D3 = 118

PORTA = %11111111 ; Maak alle poorten A Hoog
TRISA = %11111111
; 76543210
PORTB = %00000000 ; Maak alle poorten B Laag
TRISB = %00000000

S1 = 1 'voor alle zekerheid op 1 gezet
START:
IF S1 = 0 THEN GOTO SONG1
GOTO START

SONG1:
SOUND PIN,[G,80,D2,80,C2,20,BE2,20,A2,20,G2,80,D2,80,C2,20,BE2,20,A2,20,G2,80,D2,80,C2,20,BE2,20,C2,20,A2,80]
DELAYMS 2500
S1 = 1
GOTO START

END

Heb je wel een pull-up weerstand aan de schakelaar?
Ook:

code:

S1 = 1

kan niet; het is een input, geen output

[Bericht gewijzigd door Arco op 30 juli 2019 00:17:24 (41%)]

Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com

Er zit een pull-up van 4k7 naar de VDD

Het statement S1 = 1 hoort er idd niet in, maar die heb ik erin gezet omdat het niet werkte.

Ik weet niet hoe de compiler werkt, maar je hebt kans dat die PORTA.0 van input naar output zet na het zien van 'S1 = 1'
(ik hou niet van 'zelfdenkende' compilers; dat doe ik wel...)

Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com

Ik heb S1 = 1 weggehaald.

Maar het blijft raar dat de 'loop' gewoon blijft lopen.
Ik heb met een voltmeter de waarde op PortA.0 gemeten, die is echt hoog.

Waarom gaat hij dan toch naar START:
rara...

DEVICE 16F628A ; Processor type
CONFIG INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
XTAL 4
ALL_DIGITAL true ; Alle poorten digitaal
SYMBOL PIN = PORTB.0 ; Sound - pin
SYMBOL S1 = PORTA.0 ; Schakelaar
SYMBOL R = 0
SYMBOL C = 82
SYMBOL Db0 = 85
SYMBOL D = 87
SYMBOL Eb = 89
SYMBOL E = 92
SYMBOL F = 94
SYMBOL Gb = 95
SYMBOL G = 97
SYMBOL Ab1 = 99
SYMBOL A1 = 73
SYMBOL Bb1 = 76
SYMBOL BE1 = 79
SYMBOL C1 = 82
SYMBOL Db1 = 85
SYMBOL D1 = 87
SYMBOL Eb1 = 89
SYMBOL E1 = 92
SYMBOL F1 = 94
SYMBOL Gb1 = 95
SYMBOL G1 = 97
SYMBOL Ab2 = 99
SYMBOL A2 = 101
SYMBOL Bb2 = 102
SYMBOL BE2 = 104
SYMBOL C2 = 105
SYMBOL D2 = 108
SYMBOL E2 = 110
SYMBOL F2 = 111
SYMBOL Gb2 = 112
SYMBOL G2 = 113
SYMBOL Bm3 = 116
SYMBOL C3 = 117
SYMBOL D3 = 118

PORTA = %11111111 ; Maak alle poorten A Hoog
TRISA = %11111111
; 76543210
PORTB = %00000000 ; Maak alle poorten B Laag
TRISB = %00000000

START:
IF S1 = 0 THEN GOTO SONG1
GOTO START

SONG1:
SOUND PIN,[G,80,D2,80,C2,20,BE2,20,A2,20,G2,80,D2,80,C2,20,BE2,20,A2,20,G2,80,D2,80,C2,20,BE2,20,C2,20,A2,80]
DELAYMS 2500
GOTO START

Ik zou voor de zekerheid ook de comparators uitzetten (CMCON = 0x07)

Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com

Op 30 juli 2019 01:19:55 schreef Bavelt:
Ik heb S1 = 1 weggehaald.

Dat zegt niks als je er niet bijverteld hoe je de ingang hebt aangesloten, ligt die nu aan de GND of aan de VCC.
Los laten hangen is geen optie.

LDmicro user.
Lambiek

Special Member

Op 29 juli 2019 23:43:26 schreef Bavelt:
Soms kun je zo heerlijk over dingen heen kijken...

Zeker. :)

Dit staat niet goed zo.

pic basic code:


PORTA = %11111111
TRISA = %11111111 

Moet dit zijn.

pic basic code:


PORTA = %00000000
TRISA = %11111111 
Als je haar maar goed zit, GROETEN LAMBIEK.