Tonen generen met PIC16F628A

Op 1 augustus 2019 23:27:30 schreef Arco:
Da's een beperking van Proton zelf,..

Van een beperking gesproken, die kan tellen voor 'jonge' gasten die met IR willen spelen...al die mooie TSOP ontvangers voor weinig geld ;)

Op 1 augustus 2019 23:30:45 schreef Bavelt:
Ik moet trouwens opmerken, Arco en MGP, dat ik het heel plezierig vind dat jullie zo snel en adequaat antwoorden.
Ik hoop ook dat - als ik wat meer bedreven in deze materie ben - ik ook anderen kan helpen zoals jullie dat doen!

Je geeft tenminste aan dat je er mee bezig bent en dat doet heel veel op een forum :)

[Bericht gewijzigd door MGP op 1 augustus 2019 23:40:02 (43%)]

LDmicro user.
Lambiek

Special Member

Op 1 augustus 2019 23:37:35 schreef MGP:
Van een beperking gesproken, die kan tellen voor 'jonge' gasten die met IR willen spelen...al die mooie TSOP ontvangers voor weinig geld ;)

Niets beperking, dat kun je prima met HPWM doen of met RC5. En als je iets verder bent kun je zelf je protocol maken voor IR.

Je geeft tenminste aan dat je er mee bezig bent en dat doet heel veel op een forum :)

Helemaal mee eens. :)

Op 1 augustus 2019 23:13:09 schreef MGP:
Hij kan 'on the fly' de frequentie veranderen en ook op 0 zetten.
De frequentie kan ook een variabele zijn die hij om de zoveel mS aanpast.

Precies, je kunt tientallen regels onder elkaar zetten met HPWM met allemaal verschillende waardes. Zowel de puls breedte als de frequentie, gewoon een beetje creatief zijn. :)

En als je bijv. één regel met HPWM neer zet, dan wordt die waarde vast gehouden, "wat je verder ook doet in je programma" tot dat jij die waarde aanpast.

Als je haar maar goed zit, GROETEN LAMBIEK.

Op 2 augustus 2019 10:21:47 schreef Lambiek:
[...]
Niets beperking, dat kun je prima met HPWM doen of met RC5. En als je iets verder bent kun je zelf je protocol maken voor IR.

Hoe kun je dan een draaggolf maken van 38kHz zonder RC5 wat ik trouwens over het hoofd heb gezien..?
Ben niet zo goed thuis in Proton, 't zijn mijn eerste stappen hierin en de laatste keer dat ik in Basic heb geprogrammeerd was op mijn Commodore 64

LDmicro user.
Lambiek

Special Member

Frequentie op 38KHz zetten.

Zie hier een voorbeeld voor een lichtsluis met IR. Is razend snel, ziet pingpongballen en tennisballen van af 10 meter hoogte vallen.

Dit is trouwens gemaakt voor een pratende afvalbak, zodra je daar iets ingooit krijg je een tekst te horen of een muziekje. Dit om de jongeren te stimuleren om het afval in de bak te gooien en niet op straat.

Zie bladzijde 80.

https://www.circuitsonline.net/downloads/werken_met_profilab...rt_4.0.pdf

Een afstandsbediening heb ik een keer geplaatst op show your projects, kan ik even niet vinden.

Als je haar maar goed zit, GROETEN LAMBIEK.

Een leerrijke PDF, zeker weten, eenvoudig en heel mooi uitgelegd, top.

Jij geeft 38kHz op als frequentie (blz82) en de handleiding spreekt bij mij over max 32kHz, mijn Protonversie zal dus te oud zijn of een foutje in de handleiding.

LDmicro user.
Lambiek

Special Member

Op 2 augustus 2019 11:03:44 schreef MGP:
..en de handleiding spreekt bij mij over max 32kHz, mijn Protonversie zal dus te oud zijn of een foutje in de handleiding.

Welke handleiding bedoel je, die van Proton of anders?

Als je haar maar goed zit, GROETEN LAMBIEK.

Let op: niet alle AB's gebruiken het RC5 protocol.
Dan moet je zelf gaan uitvogelen wat de ontvangen waarden betekenen.
Ik heb dat gedaan met een scope, werkt prima maar kost wel de nodige tijd.
Je moet nl alle knoppen opvangen en het bitpatroon noteren. Als je die vervolgens vergelijkt zie je de overeenkomsten en verschillen. De verschillen geven aan welke knop je hebt ingedrukt.

Over tonen: je kunt ook zonder de ingebouwde commando's blokgolven maken. Timers zijn daar ideaal voor.
Met een zeer snelle uC, de 24HJ128GP502, is het mij gelukt een keurige sinus te maken, maximale frequentie 3 kHz (256 stappen).

[Bericht gewijzigd door hadv op 2 augustus 2019 12:09:32 (23%)]

Just find out what you like and let it kill you

Op 2 augustus 2019 11:56:53 schreef Lambiek:
[...]
Welke handleiding bedoel je, die van Proton of anders?

Die van proton, dat staat hier wat hoger in een uittreksel daarvan die ik eerder als bijlage heb gepost.

@hadv, het is niet echt de bedoeling dat ik mij verder ga verdiepen in Protonbasic maar ik vond het raar dat de manual daar een beperking op gaf.

LDmicro user.
Lambiek

Special Member

Op 2 augustus 2019 12:05:24 schreef MGP:
Die van proton, dat staat hier wat hoger in een uittreksel daarvan die ik eerder als bijlage heb gepost.

Daar staat inderdaad dit.

code:


Frequency is a variable, constant (0-32767), or expression that specifies the desired frequency
of the Pwm signal.

Maar 38 of 40KHz is geen enkel probleem. Ik pwm voor een motorregeling ook gewoon op 40Khz, werkt prima. Wel met een 16F887 of een 18F4520. Met de nieuwere types kun je volgens mij nog hoger.

Als je haar maar goed zit, GROETEN LAMBIEK.

Zopas eens getest en de handleiding zal het jammer genoeg bij het rechte eind hebben. :S

Een 16F628a op 20Mhz geeft de exacte pwm frequentie tot op 32kHz
Op 35000 ingave is dat al bijna 36kHz
op 40000 ingave krijg ik iets meer dan 250kHz uit (en dat is geen vergissing), alles gemeten met een scoop en een frequentiecounter, wel een mooie blokgolf.
Alle tests werden verschillende keren uitgevoerd.

Ik denk dat als je boven de 32767Hz gaat de output freq. ongedefinieerd wordt omdat de berekening van de timerinstelling met 16bits getallen werkt in Proton.

LDmicro user.

Schijnbaar gebruikt de compiler signed integers:

Frequency is the desired frequency of the PWM signal. On devices
with 2 channels, the Frequency must be the same on both channels.
Not all frequencies are available at all oscillator settings. For the nonlong versions of PBP (PBP and PBPW), the highest frequency at any
oscillator speed is 32767Hz.

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

Special Member

Op 2 augustus 2019 15:35:36 schreef MGP:
Zopas eens getest en de handleiding zal het jammer genoeg bij het rechte eind hebben. :S

Natuurlijk klopt dat, maar dat wil niet zeggen dat het niet hoger kan.

Ik denk dat als je boven de 32767Hz gaat de output freq. ongedefinieerd wordt.....

Tot 32KHz geeft de CCP_PIN precies wat je ingeeft en daarboven verandert de waarde. Maar het blijft wel een stabiele waarde, Als ik 38000 ingeef krijg ik hier 38.5KHz en dat blijft zo.

Maar even iets anders, heb je weleens geprobeerd om 32KHz op een TSOPxxxx te zetten? Ik denk dat ze dat ook gewoon pikken, maar weet het niet zeker.

Als je haar maar goed zit, GROETEN LAMBIEK.

Idd de waarden op de CCP pin blijven rotsvast ook die 250kHz en de duty blijft ook op 50%.

Als ik 38000 ingeef kom ik boven de 39kHz uit, niet dat het voor een TSOP veel uitmaakt.
32kHz weet ik niet maar daarvoor heb ik voor het ogenblik geen testopstelling staan, dat zal voor een andere keer zijn.

Door dit in de manual te lezen dacht ik dat je niet hoger kon dan 32767 maar dat is eigenlijk niet correct.
Voor mezelf is dat niet belangrijk omdat ik Proton niet gebruik.

NB. Moest ik u zijn zou ik de titel van uw PDF veranderen naar één die een duidelijke connectie met (Proton)Basic heeft.
De titel met enkel Profilab deed mij al besluiten om die niet te lezen omdat ik daar geen interesse voor had, maar ik had al iets gemist volgens zien.
Misschien alle basicvoorbeelden in een aparte PDF bundelen, zijn heel leerrijk en jij schrijft toch heel graag ;)

LDmicro user.
Lambiek

Special Member

Op 3 augustus 2019 13:02:38 schreef MGP:
32kHz weet ik niet maar daarvoor heb ik voor het ogenblik geen testopstelling staan, dat zal voor een andere keer zijn.

Ik ga daar ook nog eens een opstelling voor maken, wil wel eens kijken of dat gaat.

Door dit in de manual te lezen dacht ik dat je niet hoger kon dan 32767 maar dat is eigenlijk niet correct.

Ja, het klopt wel natuurlijk. Tot 32KHz gebeurt er wat je ingeeft en daarboven gaat het afwijken. Ik heb het gewoon een keer geprobeerd en het werkte stabiel.

NB. Moest ik u zijn zou ik de titel van uw PDF veranderen naar één die een duidelijke connectie met (Proton)Basic heeft.

Ik heb het wel voor het werken met Profilab geschreven natuurlijk, gewoon omdat daar weinig over te vinden was.

De titel met enkel Profilab deed mij al besluiten om die niet te lezen omdat ik daar geen interesse voor had, maar ik had al iets gemist volgens zien.

In het voorwoord staat toch wel het één en ander hoor. :)

code:


Voorwoord
Dit boek gaat over werken met Profilab Expert 4.0, een programma van ABACOM.
ABACOM  www.abacom-online.de  is een Duits ingenieurs bureau, welke dit programma op de markt heeft gebracht. Zelf werk ik al jaren met dit programma, tot grote tevredenheid. 
Er is echter weinig te vinden over het werken met het programma en wat er allemaal mogelijk is. Misschien komt het wel door de enorme uitgebreidheid van het programma. Ik ga dan ook proberen het één en ander uit te leggen over het werken met Profilab.                                                           We gaan eenvoudig van start. Profilab werkt met een grafische programmeer omgeving; je knoopt dus functie blokken en poorten aan elkaar om tot een werkend geheel te komen. 
Het is de bedoeling om de voorbeelden te gaan maken met een K8055 van Velleman. Deze kaart (één van de vele) wordt ondersteund door Profilab en kan via de usb poort aangesloten worden op de pc.
Maar eerst maken we wat simpele voorbeelden met wat schakelaars en drukknoppen om een beetje aan het programma te wennen.
Later wil ik ook wat voorbeelden maken met een PIC microcontroller 16F887 die kan communiceren met Profilab via de usb poort (met een usb naar serieel converter) of via de seriële compoort van de pc.
Ook zal ik wat schema’s en printen plaatsen over de onderwerpen waar we het over gaan hebben.
Profilab draait zowel onder Windows XP, 7, en 8. Zelf heb ik 7 en daar worden ook de voorbeelden in gemaakt.
Profilab installeert automatisch; dit zal dus niet voor problemen zorgen. Het kan in een paar talen geïnstalleerd worden waaronder Duits. Daar heb ik destijds ook voor gekozen en ben daar eigenlijk nooit van afgestapt. Maar wie het in het Engels of Frans wil installeren is daar natuurlijk vrij in. Ik ga dus ook in het begin de Duitse termen van componenten gebruiken; later in deze uitleg moet iedereen de plaats van de componenten wel weten te vinden. Dan gaan we nu maar eens van start met het programma, hoop dat velen er net zoveel plezier aan beleven als ik. 

Misschien alle basicvoorbeelden in een aparte PDF bundelen, zijn heel leerrijk en jij schrijft toch heel graag ;)

Ja, ik vind het wel leuk. Maar het kost wel veel tijd, alles is eerst gebouwd en getest. En dan al het tekenwerk niet te vergeten, het moest ook scherp zijn voor in het boek. Helaas is dat er niet gekomen, "op één exemplaar na dan" ik durfde het niet aan. Maar daar heb ik nu wel spijt van.

Als je haar maar goed zit, GROETEN LAMBIEK.

Op 3 augustus 2019 16:57:47 schreef Lambiek:
In het voorwoord staat toch wel het één en ander hoor. :)

Omdat het over Profilab ging in de titel heb ik zelfs het voorwoord niet gelezen, shame on me :D
Dat je er spijt van hebt kan ik begrijpen als je er zoveel werk heb ingestoken.

code:

Ik ga daar ook nog eens een opstelling voor maken, wil wel eens kijken of dat gaat.

Als je onderstaande grafiek van een TSOP4838 of TSOP48xx bekijkt dan komt het 0.9 punt overeen met 34.2kHz en het 1.1 punt met 41.8 kHz als ik de grafiek goed inschat.
Dan zal 32kHz volgens mij zeer slecht ontvangen worden met een 38kHz ontvanger.

edit: 32kHz zou dan op het 0.8 punt liggen op de grafiek.

LDmicro user.
Lambiek

Special Member

Dan zou je de TSOP1730 moeten nemen, die zit op 30KHz.

Als je haar maar goed zit, GROETEN LAMBIEK.

Dat zou je kunnen doen, maar de afwijking in Proton op 36kHz valt redelijk mee en daar zijn meer componenten voor te vinden als hobbyist.
Ik zou dan eerder kiezen voor TSOP4836

Zopas eens getest in LDmicro en daar kan ik tot 250kHz gaan zonder noemenswaardige afwijking, vanaf dan wordt de afwijking stelselmatig groter, tot 6kHz op 270Khz.

Die 250 lijkt een magisch getal te zijn, zal wel afhankelijk zijn van het minimum deeltal in de prescaler van de timer, ik zou er eens de datasheet moeten op nakijken.

LDmicro user.
Lambiek

Special Member

Op 4 augustus 2019 11:52:54 schreef MGP:
Zopas eens getest in LDmicro en daar kan ik tot 250kHz gaan zonder noemenswaardige afwijking, vanaf dan wordt de afwijking stelselmatig groter, tot 6kHz op 270Khz.

Dan zou je haast gaan denken dat het in de compiler zit.

Als je haar maar goed zit, GROETEN LAMBIEK.

Met een instruction cycle van 1MHz (4MHz clock) kun je ook nooit hoger als 250kHz komen.
En eigenlijk mag 't dan geen pwm meer heten, omdat de resolutie nog maar 1 bit is... ;)

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

De test gebeurde met een 20Mhz kristal.
Het is idd afhankelijk van de compiler hoe hoog je kunt instellen.

Als je met deze website wat simuleert dan zie je ook dat 250kHz zowat het maximum is zonder grote afwijking en met een 6.5bit resolutie

LDmicro user.

het werken met een PIC begin ik echt leuk te vinden. Alles in Circuit programmeren en meteen testen!
Geweldig!

Pas maar op voor de verslaving :)

btw: kun je nu al een liedje zingen? ;)

[Bericht gewijzigd door MGP op 6 augustus 2019 12:20:26 (39%)]

LDmicro user.
Lambiek

Special Member

Op 6 augustus 2019 11:39:21 schreef Bavelt:
het werken met een PIC begin ik echt leuk te vinden. Alles in Circuit programmeren en meteen testen!
Geweldig!

Vooral doorgaan. :)

Als je haar maar goed zit, GROETEN LAMBIEK.

Het werkt inderdaad verslavend!
Menig keer gaat het van "nog even dit proberen" en "nog even dat" en is het geen uitzondering dat de klok de genadeloze tijd van 1:15 uur aanwijst...
Oei.

Het eerste projectje (deurbelletje met eigen melodie) werkt perfect en is zelfs al gemonteerd.

Een tweede exemplaar kent wat probleempjes mbt de audio.

De audio trap bestaat uit 2 torren. Bij het eerste printje is T1 een BC547B en T2 een BD241. Zie schema (het werken met Splan lukt me nog niet zo goed).

Bij het tweede printje heb ik voor T2 een TIP142 gebruikt, daar heb ik er een heleboel van. Een Darlington tor.

Beide hebben dezelfde luidspreker van een oude home cinema set. Er komt een stevig geluidje uit, goed genoeg voor een deurbel.
Bij het tweede printje krijg ik evenwel het verschijnsel dat de speaker na einde van een toon of de melodie een 'plofje' geeft. Je 'hoort'hem als het ware schakelen tussen de tonen.

Daarnaast het vreemde verschijnsel dat naarmate de tonen vorderen, ze steeds harder worden om te eindigen met een fors volume.
De collector van T1 gaat naar de +5V, die van T2 naar de +9V

Wellicht vandaag toch maar een BD241 halen?

Het programmaatje:
;Meldodie Midsomer Murders
DEVICE 16F628A ; 16F628A PIC Microcontroller
CONFIG INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF

DECLARE XTAL 4

ALL_DIGITAL TRUE ; All inputs digital
DECLARE PORTB_PULLUPS ON ; On-chip pull-up weerstanden actief op poortB
DECLARE CCP1_PIN PORTB.3 ; Hardware pwm pin portb.3 = pin9 on chip
SYMBOL AUDIO = PORTA.0 ; Poort A.0 is de Audio Uitgang te gebruiken bij sound, freqout instructies
SYMBOL S1 = PORTB.0 ; Drukknop om te starten, pull_ups zijn ingeschakeld dus ingang 0V voor start

TRISA = %00000000 ; PoortA = output
TRISB = %11110111 ; poortB = input , pwm_pin = output 9

CLEAR ; Wis geheugen
CMCON = 0x07 ; Schakel Comperator uit

DIM I AS BYTE ; Mbv I kan extra vertraging worden ingesteld
I =100

START:
IF S1 = 0 THEN
HPWM 1, 127, 622 ;1
DELAYMS 250 + I
HPWM 1, 127, 587 ;2
DELAYMS 250 + I
HPWM 1, 127, 622 ;3
DELAYMS 250 + I
HPWM 1, 127, 587 ;4
DELAYMS 250 + I
HPWM 1, 127, 523 ;5
DELAYMS 375 + I
HPWM 1, 127, 466 ;6
DELAYMS 125 + I
HPWM 1, 127, 587 ;7
DELAYMS 250 + I
HPWM 1, 127, 523 ;8
DELAYMS 1000 + I
HPWM 1, 127, 622 ;9
DELAYMS 250 + I
HPWM 1, 127, 784 ;10
DELAYMS 750 + I
HPWM 1, 127, 1047 ;11
DELAYMS 500 + I
HPWM 1, 127, 987 ;12
DELAYMS 250 +I
HPWM 1, 127, 784 ;13
DELAYMS 1250 + I
HPWM 1, 127, 698 ;14
DELAYMS 250 +I
HPWM 1, 127, 622 ;15
DELAYMS 250 +I
HPWM 1, 127, 554 ;16
DELAYMS 250 +I
HPWM 1, 127, 466 ;17
DELAYMS 250 +I
HPWM 1, 127, 554 ;18
DELAYMS 375 +I
HPWM 1, 127, 698 ;19
DELAYMS 125 +I
HPWM 1, 127, 784 ;20
DELAYMS 750 +I
HPWM 1, 127, 523 ;21
DELAYMS 500 +I
HPWM 1, 127, 622 ;22
DELAYMS 750 +I
HPWM 1, 127, 587 ;23
DELAYMS 500 +I
HPWM 1, 127, 392 ;24
DELAYMS 250 +I
HPWM 1, 127, 587 ;25
DELAYMS 1250 +I
HPWM 1, 0, 0
ENDIF
GOTO START