Nu ik met MikroBasic ben gestart, een eerste programmaatje gemaakt om middels de PIC16F1826 een melodietje te laten spelen.
En wat aanloop-probleempjes:
- Het melodietje speelt wel, maar reageert niet op de schakelaar S1, op poort A.0 (die is dus blijkbaar altijd een '0 ', Hierdoor herhaalt het liedje zich steeds
- De frequentie en de tijden kloppen niet (frequentie te laag, duur te lang). Hie zit dus iets niet goed met de kloksnelheid o.i.d
De code:
'==============================================================================
program Midsomer_1826
'-------------------------------------------------------------------------
'==============================================================================
main:
'==============================================================================
PortA = %11111111
TRISA.0 = 1
TRISB.3 = 0
'
OSCCON = %11110000 '32MHz internal
Sound_Init(PORTB, 3)
while true
if porta.0 = 0 then
delay_ms(20)
if porta.0 = 0 then
Sound_Play(622, 250)
Sound_Play(587, 250)
Sound_Play(622, 250)
Sound_Play(587, 250)
Sound_Play(523, 375)
Sound_Play(466, 125)
Sound_Play(587, 250)
Sound_Play(523, 1000)
delay_ms(1000)
END IF
END IF
wend
'
end. Edit Post:
Vwb de S1 ben ik er al uit; Poort A.0 moet als digitaal worden gedefinieerd!
ANSELA.0 = 0 '
TRISA.0 = 1
Vwb de snelheid: dat lag aan de Project instellingen.
Dus opgelost!
[Bericht gewijzigd door Bavelt op (18%)]
Hierbij het programma voor het afspelen van een meoldietje na het indrukken van een schakelaar.
Het is gemaakt dmv MikroBasic en de microcontroller is de PIC16F1826.
Er wordt gebruik gemaakt van het commando Sound_Play.
Voor de toonhoogte en duur worden 2 constanten-tabellen gebruikt.
De code:
'==============================================================================
program Midsomer_1826
'Het programma speelt na het indrukken van S1 de tune uit de serie Misomer Murders
'------------------------------------------------------------------------------
Dim Toon as byte
Const PLUS as byte = 100 'Extra vertraging, hiermee kan melodie trager worden afgespeeld)
Const FREQ as WORD [25] = (622,587,622,587,523,466,587,523,622,784,1047,987,784,698,622,554,466,554,698,784,523,622,587,392,587)
Const DUUR as Word [25] = (250,250,250,250,375,125,250,1000,250,750,500,250,1250,250,250,250,250,375,125,750,500,750,500,250,1250)
'==============================================================================
main:
'==============================================================================
PortA = %11111111
ANSELA.0 = 0 'Poort A Digitaal
TRISA.0 = 1 'Poort A Hoog
OSCCON = %11110000 '32MHz internal
Sound_Init(PORTB, 3)
while true
if porta.0 = 0 then
delay_ms(20)
if porta.0 = 0 then
For Toon = 0 to 24
Sound_Play(Freq[Toon], (Duur[Toon] + Plus))
Next Toon
END IF
END IF
wend
end. Voor aanbevelingen en suggesties voor verbetering van het programma hou ik me graag aanbevolen!
Waar ik zelf nog aan zat te denken is om de constanten op te slaan in het EEprom-gedeelte.
Ik kan de waarden daar naar toe schrijven; edoch wanneer ik het melodie programma opnieuw schrijf, zijn alle EEprom waarden weer 'FF'
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Ik weet nog niet goed wat nou de juiste manier is van het progrogrammeren van de data in de Eeprom.
Ik gebruik nu de EEProm Editor in MikroBasic. Na het inbrengen van de data en Save, wordt het standaard als een .ihex file opgeslagen.
Pickit3 kent deze niet, dus hernoem ik het naar .HEX.
Als ik deze Hex file schrijf met Pickit3, dan staat de data in de EEprom.
Maar wanneer ik dat later over wil doen (bv omdat ik het vinkje ben vergeten uit te zetten en alles op FF staat), dan herschrijf hij hem niet opnieuw.
Ik doe iets niet goed.
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Je kunt het vinkje aanzetten: eeprom wordt gewist of uitzetten: eeprom wordt niet gewist. Meer smaken zijn er niet... 
(wat wou je dan nog meer zien?)
Nou, als ik de .Hex, waarin de EEprom wordt geschreven importeer en "Write", dan zie ik de geschreven waarden van de EePROM in Pickit niet. Ook niet na "Read".
Je ziet ze pas als je Pickit hebt afgesloten en opnieuw opgestart en dan "Read".
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Net even geprobeerd. (gebruik de Pickit al zolang als 'ie bestaat, maar nooit voor eeprom nodig gehad. Parameters sla ik in flash op)
Ik krijg de eeprom waardes gewoon in 't Pickit programma te zien.
Je moet wel gewoon de .hex file gebruiken. (de .iHex file is alleen voor intern gebruik van de compiler)
Die .ihex kwam uit de EEprom Editor.
Ik schrijf nu de waarde in het MikroBasic programma. Dus geen íhex-en meer.
Dat vinkje is voor mij nog even een issue.
Want dat wissen: is dat bij aanvang van het programma of als laatste?
Stel dat ik in het programma ergens op adres $02 en adres $05 een waarde in de Eeprom wil veranderen, en de overigen moeten bewaard blijven. moet die dan aan- of uitgevinkt worden?
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Je verandert de eeprom waardes in wat je wilt. Je slaat dat op als iHex file.
Als de compiler dan de hexfile maakt, wordt de inhoud van de ihex file daar automatisch bijgevoegd.
Wissen is uiteraard als eerste: het heeft weinig zin de eeprom na het programmeren te wissen... 
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Bij het aanmaken van de eepromfile de eerste keer kreeg je een vraag, (iets van 'use this in project?')
Daar had je wel ja op moeten zeggen...
Ik heb het project helemaal opnieuw aangemaakt en nu krijg ik inderdaad de melding. En netjes met Ja bevestigd.
Het schrijven gaat nu goed.
Die .Ihex file wordt dan wel iedere keer geladen bij het programmeren. Is die ook weer te verwijderen nadat de waarde is geschreven?
Dan heb ik een simpel programma gemaakt dat alleen een waarde wegschrijft in de eePROM.
Tenminste, dat is de bedoeling.
EEPROM_Write(0x02,0xAA)Het effect hiervan is een foutmelding "Programming failed at EE data address
x0002"
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Wat heeft dat met eeprom_write te maken???
(heb je vooraf een erase gedaan?)
[Bericht gewijzigd door Arco op (29%)]
Na Erase van de PIC is de melding weliswaar weg, maar het commando
EEPROM_Write(0x02,0xAA) doet niks.
De waarden blijven onveranderd.
Wat heeft dat met eeprom_write te maken???
In mijn MikroBasic Programma heb ik dit commando geplaatst. Als test om een waarde op een bepaald adres te krijgen.
Met PicKit3 programmeer ik dat programma in de PIC.
Maar hij schrijft de waarde niet weg.
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Nee, voor zover ik kan zien niet:
Aanvullende info: de 'fail' melding krijg ik wanneer ik het 'vinkje' aanzet bij EEprom Enabled in Pickit3.
Als ik het vinje uitzet, dan lijkt het goed te gaan maar er wordt geen waarde in de EEprom weggeschreven na:
EEPROM_Write(0x01,0xAA)
EEPROM_Write(0x02,0xBB) Daarnaast: Ik heb daarbij niet kunnen ontdekken hoe je de aangemaakte .ihex file door de EEProm Editor weer kan verwijderen.
Als ik die handmatig uit de programma-directory verwijder via de verkenner dan volgt bij compileren de foutmelding dat hij die file mist.
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
De .ihex file heb ik verwijderd uit het project. Ik gebruik mmomenteel een laptop, en de project Manager zit helemaal weggestopt aan de rechterkant waar hij niet makkelijk zichtbaar was.
Maar dat is gelukt.
De 'fail' boodschap ben ik nu kwijt.
De EEProm_Write doet echter nog niks.
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Of de Project Manager altijd zichtbaar is of auto-hide kun je met de 'pin' toets instellen...
Wéér wat geleerd, tjonge. De laptop waar ik nu op werk heeft een resolutie van 1377 * 768, dat is dus tamelijk klein.
Op mijn thuis PC (ben nu even elders) heb ik een groot 22"scherm, dan is dat allemaal fraaier).
Maar de EEPROM_Write werkt helaas nog niet.
Het MikroBasic programma is superklein:
program Eeprom
' Declarations section
main:
' Main program
EEPROM_Write(0x05,0x09)
end. Ik wil op adres 0x05 de waarde 0x09 wegschrijven.
Maar in de data die Pickit3 toont zie ik geen verandering.