Geluidje maken met PIC

Bavelt

Golden Member

In dat schemaatje is alles dc gekoppeld, en staat er ook nog eens 12v op! (da's 1.5A door de speaker, logisch dat de boel gaat roken... ;) )

Ik had het afgeleid van een publicatie. Deze is dan dus ook niet goed.

Fouten zijn het bewijs dat je het probeert..
Arco

Special Member

Nogal onfris schema...
Timers kun je ook zonder interrupts gebruiken (pollen), ik persoonlijk vind dat knoeiwerk.

Wat die routines precies doen weet ik ook niet, het lijkt wel of er wat includes ontbreken...

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Bavelt

Golden Member

Omdat ik mijn speakertje heb opgeblazen dacht ik deze te gebruiken: Het is een goedkope dome tweeter.

Als je er in kijkt, zie je dat er een ingebouwde elco in zit van 4,7uF.

En de draden heben een + en - (vanwege die elco been ik aan).

Maar als je dat ding zou willen gebruiken, dan kan je er geen DC zoals de collectorstroom van een tor doorheen sturen. Het ding is gemaakt om parallel te schakelen aan een 'echte' luidspreker.

Maar als je een klein versterkertje wil maken (zoals een 20Khz toon) met alleen de tweeter, wat is dan de slimste schakeling?
Een weerstand van 5 Ohm ipv een speaker en dit ding er parallel aan?

Fouten zijn het bewijs dat je het probeert..
Arco

Special Member

Een simpele piezobuzzer doet 't op die hoge frequenties een stuk beter... (spoeltje kan voor hogere frequenties wat afwijken, dit was voor 4kHz)
https://media.rs-online.com/t_large/Y1797433-01.jpg

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Bavelt

Golden Member

Een simpele piezobuzzer doet 't op die hoge frequenties een stuk beter... (spoeltje kan voor hogere frequenties wat afwijken, dit was voor 4kHz)

Grappig.. :), ik dacht dat een tweeter juist was gemaakt voor de hoge tonen en een buzzer voor een simpel 'piepje'.

Fouten zijn het bewijs dat je het probeert..
Bavelt

Golden Member

De test kan het bewijzen: ik heb nog een oude defecte multimeter waar zo'n ding in zit..

Fouten zijn het bewijs dat je het probeert..
Bavelt

Golden Member

Een spoeltje heb ik niet zo gauw bij de hand...

Is er een formule voor de waarde wanneer je boven de 20Khz wilt gaan?

Fouten zijn het bewijs dat je het probeert..
Arco

Special Member

I.p.v. spoeltje kun je bijv. ook een 100 ohm weerstand nemen, alleen is het geluid dan veel zachter.
(het spoeltje slingert de spanning op tot 25...40v, ik meet altijd met een scoop welke spoelwaarde de hoogste spanning geeft)

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Bavelt

Golden Member

Tja,
Het lijkt te werken.. :)

Ik krijg er dit uit:

22 Khz, 5vtt (ik gebruik nu alleen maar 5V voeding)

Fouten zijn het bewijs dat je het probeert..
Bavelt

Golden Member

Het spoeltje is gesloopt uit zo'n tuinlampje met led.

De kleurcode wijst naar 560

560mH? of wellicht 560uH?

Fouten zijn het bewijs dat je het probeert..
Bavelt

Golden Member

En nu maar hopen dat het hard genoeg klinkt voor de marter..

Fouten zijn het bewijs dat je het probeert..
Arco

Special Member

560 is 56uH, da's veeel te laag (zo goed als kortsluiting), dat gaat de transistor niet overleven...

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Bavelt

Golden Member

Groen Blauw Bruin (= 560). Het gaat per uH neem ik aan?

Fouten zijn het bewijs dat je het probeert..
Arco

Special Member

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Bavelt

Golden Member

56 mH zou dan Groen Blauw Oranje zijn, niet?

Maar het signaal (en geluid) lijkt goed. De tor draait de hele dag al en wordt ook niet warm.
Eventueel kan ik het weerstandje in de basis iets verhogen om de collectorstroom te beperken.

Daarnaast zou ik natuurlijk ook een versterkertje kunnen maken met een elco naar de speaker (eindtrapje met 2 torren op halve voeding).
Of een TDA2030. Daar heb ik er nog een boel van liggen. Alleen hangen daar vaak weer allerlei onderdelen om heen (weerstanden, ontkoppel-C's, etc).
Terwijl het doel eigenlijk iets heel simpels is.

[Bericht gewijzigd door Bavelt op zaterdag 30 mei 2020 17:53:58 (20%)

Fouten zijn het bewijs dat je het probeert..
Bavelt

Golden Member

Toch heb ik het nog steeds niet voor elkaar om een mooi geluidje te produceren.

Even terug naar bv de deurbel met melodietje.
Ik heb als eindtrapje de schakeling opgehaald uit de blog van Jos Verstraten.

R2 = 47 Ohm

In rust vloeit er geen stroom door de luidspreker. Da's al mooi.

Maar het verschijnsel wat ik maar niet kwijtraak is de 'tok' die je hoort zodra er een toon komt. Of ik die toon nu met Soud_Play() maak of zelf maak met timer (Latb3. hoog en laag maken).

De versterker schakelt duidelijk in zodra er een hoog op de ingang komt ('Tok'). Ik heb de ingang ook al even met een elcootje gekoppeld naar de poort, maar dat maakt niets uit.

Hoe raak ik dit "inschakel verschijnsel' nu kwijt of wat doe ik verkeerd?

Fouten zijn het bewijs dat je het probeert..
Arco

Special Member

Hoe raak ik dit "inschakel verschijnsel' nu kwijt of wat doe ik verkeerd?

Door een 'echte' versterker te bouwen... ;)
(dit is eigenlijk alleen maar een aan/uit switch. En als Ub hoger is als de Vcc van de controller werkt 't helemaal niet)

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Bavelt

Golden Member

Ub is aan de +5V aangesloten (net als de controller).

Ik heb het 'versterkertje' uitgeschakeld en in plaats daarvan een klein kant-en-klaar versterkertje met een TDA2030 op een printje aangesloten.
Het effect is hetzelfde. De aanzet van een toon geeft een 'tok' in de luidspreker.

Als je bv 10 keer een toon van 15Khz(onhoorbaar voor mij) aanbiedt met 1 sec als interval, hoor je wel 10 keer een 'tok'.

Ik kan het denk ik omzeilen door (was ik toch al mee bezig) de toon niet te laten 'ophouden' maar doorlopen. De tonen gaan dan aan één stuk door, ieder met zijn eigen frequentie. Als ik een pauze wil, dan stuur ik er gewoon een toon van 22 Khz heen. Wellicht dat de hond van de buren het wel hoort.. :)

De tonen ga ik zelf maken met een timer.
Als proef heb ik het even met delay_us gedaan, maar dat is super onbetrouwbaar. Delay_us(1000) geeft geen vertraging van 1 ms.
Delay_ms(1) wel.
Ik vermoed dat us alleen werkt als je de oscillatorfrequentie hoog genoeg hebt?
(Ik heb 8Mhz ingesteld)

Maar een timer met interrupt moet het betrouwbaarder maken (hoop ik :) )

Fouten zijn het bewijs dat je het probeert..
Bavelt

Golden Member

Het is toch moeilijk voor elkaar te krijgen om een goede toon te produceren.

De interrupt is ook wel gelukt, daarmee kan ik zelf de frequenties bepalen.
Maar ook hier blijft elke toon met een hoorbaar afsluitverschijnsel.

Dus heb ik eens geprobeerd om via PWM de toon uit te laten 'faden' door de duty cycle te verminderen in een loopje.
Dat werkt wel, maar nadat de toon 'klaar' is, eindigt het toch abrupt met een duidelijk hoorbare 'tok'.
Terwijl ik eigenlijk wil dat hij eindigt met... niks. Gewoon stopt.

Of kan dat helemaal niet?

De proef:

pic basic code:

Main:

  OSCCON  = %01110000                '8Mhz internal
  ANSELB  = 0                        'Port B Digital
  TRISB = %11110110                  'PORT B.3 as output
  PORTB = %00000001                  'Set PORTB.0 to 1, LED on
  PWM1_Init(22000)                    'Set Frequency
  PWM1_Set_Duty(100)                  'Set current duty for PWM1
  PWM1_Start()                       'Start PWM1

  While True                         'Endless loop
    PWM1_Init(329)                     'Set Frequency

  For i1 = 20 to 100
   PWM1_Set_Duty(i1)                  'Set current duty for PWM1
  Next i1
  Delay_ms(250)
  
  For i1 = 100 to 1  step -1
   PWM1_Set_Duty(i1)                  'Set current duty for PWM1
  Next i1

  Delay_ms(1500)
Fouten zijn het bewijs dat je het probeert..
Bavelt

Golden Member

Ik heb een dergelijk programmaatje gemaakt met de Arduino Uno (wonderbaarlijk nog gelukt ook :/ ). Zonder versterker, dus speakertje rechtstreeeks aan de PIC.

Maar het effect is hetzelfde. Het zal wel niet anders kunnen vermoed ik nu.
Je kan een speakertje niet ineens ('floating') laten ophouden.

Fouten zijn het bewijs dat je het probeert..
Arco

Special Member

Als er DC op staat blijf je last houden van ploppen en klikken...

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Bavelt

Golden Member

Elcootje tusen de speaker en pin geplaatst; dan zou er geen DC op staan.
Helpt ook niet.

Fouten zijn het bewijs dat je het probeert..
Arco

Special Member

Je kunt de pin aan het eind van de toon als input schakelen...

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Bavelt

Golden Member

Dan krijg je dus zo iets:

pic basic code:

 

'----------------------------------------------------------------------------------------
sub procedure Interrupt() iv 0x0004 ics ICS_AUTO
'----------------------------------------------------------------------------------------
  If TMR2IF_bit Then                                                'See if timer2 irq
    Latb.3 = not latb.3
    TMR2IF_bit = 0
  End If
end sub

en 
-----

While True                         'Endless loop
  GIE_bit = 0
  TRISB.3 = 1
  If porta.0 = 0 then
    GIE_bit  = 1                     'Enable timer2 irq
    TRISB.3 = 0
    Delay_ms(1000)
  End if 

Maar dat helpt niet.

Fouten zijn het bewijs dat je het probeert..
Bavelt

Golden Member

Ik denk dat het verschijnsel niet bij MB ligt of de PIC.
Als ik een 1000 Hz toon via de PC laat horen en hem stop, hoor je ook de afsluitende 'tik' uit de PC-speakers.

Fouten zijn het bewijs dat je het probeert..