Tonen generen met PIC16F628A

Arco

Special Member

PORTA setting doet niks als alles ingang is...

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

Special Member

Je zet de hele poort hoog op deze manier, dus zodra de spanning erop komt begint hij de melodieën af te spelen.

EDIT:
Of trekt de TS pinA.0 naar de gnd?

Als je haar maar goed zit, GROETEN LAMBIEK.
Sjoerd Kreyns

Golden Member

Heb je een pull-up weerstand geplaatst bij S1? Anders werkt het ook niet.

SMD weerstandjes zoeken in grijze vloerbedekking is ook een uitdaging ... 8*1=255 ... Het nadeel van ruimte: Als je het hebt, staat het binnen de kortste keren weer vol.
Arco

Special Member

Of trekt de TS pinA.0 naar de gnd?

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

De PORTA settings doen alleen wat als de betreffende TRISA pin '0' is (output)

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

Special Member

Op 30 juli 2019 09:41:59 schreef Arco:
De PORTA settings doen alleen wat als de betreffende TRISA pin '0' is (output)

Ja je hebt gelijk, het is alleen voor de uitgangen.

Als je haar maar goed zit, GROETEN LAMBIEK.
Arco

Special Member

De comparator kan dit zoals gezegd wel veroorzaken (ik weet niet of de compiler die netjes uitzet als je ALL DIGITAL TRUE opgeeft)

The PORTA pins are multiplexed with comparator functions.
The operation of these pins are selected by control bits in the CMCON
register. When selected as a comparator input, these pins will always read as ‘0’.

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

Golden Member

Dit zal het inderdaad zijn, Arco!

Ik kan dit testen met een heel simpel programmaatje:
DEVICE 16F628A ; Processor type
CONFIG INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
ALL_DIGITAL true ; Alle poorten digitaal

PORTA = %11111101
TRISA = %11111101
; 76543210 ; Hulpregel
PORTB = %11111101
TRISB = %11111101

START:
IF PORTB.0 = 0 THEN
PORTB.1 = 1
ELSE
PORTB.1 = 0
ENDIF
GOTO START

END

Voor poorten B werkt het, kies ik echter voor de A-poorten ipv de B-poorten, dan is de poortwaarde van de input altijd 0.

Kan ik 'selected as comparator input' ergens met een parameter uitschakelen (omdat de compiler dat blijkbaar niet doet)?

Fouten zijn het bewijs dat je het probeert..
Lambiek

Special Member

Op 30 juli 2019 09:57:16 schreef Arco:
De comparator kan dit zoals gezegd wel veroorzaken (ik weet niet of de compiler die netjes uitzet als je ALL DIGITAL TRUE opgeeft)

Ik gebruik CMCON nooit, tenzij ik de Comparator nodig heb. Maar ik weet niet wat de TS allemaal uitspookt. :)

Als je haar maar goed zit, GROETEN LAMBIEK.
Arco

Special Member

Bij oude pics als de 628/48 staan de comparators default op 'aan'. Bij nieuwere niet meer... (moet dus uit indien niet gebruikt...)

Kan ik 'selected as comparator input' ergens met een parameter uitschakelen (omdat de compiler dat blijkbaar niet doet)?

Ja, zoals eerder gezegd met

code:

CMCON = 0x07

@lambiek: Waarschijlijk heb je dan portA voor output gebruikt, dan speelt het comparator verhaal niet mee...

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

Golden Member

Dat is het Arco. Heel erg bedankt, nu kan ik verder!

Ik heb enorm lopen puzzelen, van alles geprobeerd maar ben er nu dus achter dat de comparators die op de poorten A werken, moeten worden uitgezet als je digitaal werkt.

Ik moet zeggen er gaat wel een wereld voor me open met het programmeren van PIC's. Daar kom je zonder hulp van anderen heel moeilijk uit.
In de cursus PIC Basic kwam dit issue ook niet naar voren.

Inmiddels kan ik programmeren met de PIC op het breadboard, gekoppeld aan de PICkit3.

Nogmaals dank!

Fouten zijn het bewijs dat je het probeert..
Lambiek

Special Member

Op 30 juli 2019 12:17:18 schreef Arco:
@lambiek: Waarschijlijk heb je dan portA voor output gebruikt, dan speelt het comparator verhaal niet mee...

Nee, gewoon als ingang. Maar kan met de compiler te maken hebben, de TS gebruikt de gratis versie.

Als je haar maar goed zit, GROETEN LAMBIEK.
Bavelt

Golden Member

Ik zit nog met een probleempje (wellicht een ander topic?)

Voor het maken van een toon kan je bij PIC16F628A de instructie SOUND of FREQOUT gebruiken.
Bij SOUND kan ik de juiste frequentie niet instellen, dat gaat in stapjes van 78.74 Hz heb ik begrepen. Dat is te grof.
Voordeel hiervan is wel dat je meerdere tonen achter elkaar kan afspelen met één commando.
Bij FREQOUT kan je dat niet. Dat betekent dus m.i. een aparte instructie per toon.
Maar daar kan je wél weer de juiste frequentie opgeven.

Ik krijg er wel geluid uit, maar een heel vreemd signaal (soort dubbele sinus, zie foto). het klinkt ook heel naar. Met behulp van een elcootje over de speaker kun je wel e.e.a afvlakken, maar een mooie toon lukt me niet.

Daarbij zit de 4Mhz "draaggolf" er ook nog in.

DEVICE 16F628A ; Processor type

XTAL 4 ; Kristal 4Mhz

CONFIG INTRC_OSC_NOCLKOUT,_ ; Interne Oscillator
WDT_OFF,_ ; WatchDog Timer uit
PWRTE_OFF,_ ; Power-up Timer Enable uit
MCLRE_OFF,_ ; Externe Master Reset Enable uit
BODEN_OFF,_ ; Brown Out Detectie Enable uit
LVP_OFF,_ ; Low-Voltage Programming uit
CP_OFF ; Code Protection uit

ALL_DIGITAL true ; Alle poorten digitaal

SYMBOL AUDIO = PORTB.0 ; Poort B.0 is de Audio Uitgang
SYMBOL S1 = PORTA.0 ; Schakelaar om te starten

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

; 76543210 ; Hulpregel poort A
PORTA = %00000000 ; Maak poorten A laag
TRISA = %11111011

; 76543210 ; Hulpregel poort B
PORTB = %11111110 ; Stel Poort B in
TRISB = %11111110 ; Poort B.0 = Output

START:
IF S1 = 0 THEN GOTO GELUID
GOTO START

GELUID:
FREQOUT AUDIO, 65000, 440

GOTO START
END

Wat me tevens opvalt is dat ondanks dat je opgeeft dat je de interne oscillator gebruikt, toch XTAL = 4 moet opgeven, anders krijg ik Assembler errors (vanwege de FREQOUT instructie).

Fouten zijn het bewijs dat je het probeert..
Arco

Special Member

De compiler moet ALTIJD de clockfrequentie weten; hij is niet helderziend... :)
Daar je niet zegt hoe de scoop staat ingesteld, is het moeilijk te interpreteren. (is dat soms een 50Hz (brom) sinus?)

Volgens mij gebruikt FREQOUT pwm, dus een mooi signaal krijg je zonder filtering sowieso niet...

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

Special Member

FREQOUT maakt inderdaad gebruik van pwm, dus daar moet een filter tussen.

En een extern kristal van 10 of 20MHz is ook beter in dit geval.

code:


Freqout generates one or two sine waves using a pulse-width modulation algorithm. Freqout
will work with a 4MHz crystal, however, it is best used with higher frequency crystals, and operates
accurately with a 20MHz crystal. The raw output from Freqout requires filtering, to eliminate
most of the switching noise. The circuits shown below will filter the signal in order to play
the tones through a speaker or audio amplifier.

Als je haar maar goed zit, GROETEN LAMBIEK.
Arco

Special Member

Een goedkoop spraakspeakertje wil ook wel helpen...
(die halen maar een paar kHz, en filteren door hun beroerde frequentiebereik veel pwm spul eruit... ;) )

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

Golden Member

Op 31 juli 2019 13:15:33 schreef Arco:
De compiler moet ALTIJD de clockfrequentie weten; hij is niet helderziend... :)
Daar je niet zegt hoe de scoop staat ingesteld, is het moeilijk te interpreteren. (is dat soms een 50Hz (brom) sinus?)

Volgens mij gebruikt FREQOUT pwm, dus een mooi signaal krijg je zonder filtering sowieso niet...

Arco, in de basiscursus beginnen met Pic programmeren staat het volgende:

"Als je XTAL weglaat in je programma, gaat de PIC Basic compiler er vanuit dat je kristal een 4MHz exemplaar is".

De assembler-errors krijg ik alleen i.c.m. de FREQOUT instructie. Bij anderen (zoals SOUND) krijg je die foutmeldingen niet.

Ik gebruik batterijen in de testopstelling en heb een vlakke 5 Volt als voeding. De Sinustoppen die je op het scopebeeld ziet zijn wel in de juiste frewquentie (ca 440 Hz).
Een frequentieteller geeft echter 4 Mhz aan en ziet die toppen niet.

De schakeling met de elco over de luidspreker had ik gezien in de help files van de compiler. Maar dat maakt het er niet fraaier op. De toon die je in de speaker hoort is meer een , ja hoe zeg je dat, een krijs-geluidje. In ieder geval geen mooie toon zoals bij de SOUND.

Maar stel dat ik een toon wil van precies 440 Hz, kan ik die toch niet maken met SOUND? Ben ik gebonden aan de stapjes van 74.78 Hz?
Of wordt dat anders met een ander kristal?

Fouten zijn het bewijs dat je het probeert..
Arco

Special Member

Arco, in de basiscursus beginnen met Pic programmeren staat het volgende:
"Als je XTAL weglaat in je programma, gaat de PIC Basic compiler er vanuit dat je kristal een 4MHz exemplaar is".

Die cursus is gebaseerd op een oeroude compilerversie, nog uit de tijd dat de interne oscillator 4MHz was.
Nieuwere pic's hebben vaak de keuze van 32kHz t/m 64MHz...

Is jammer dat die cursus eigenlijk nooit meer is aangepast aan de huidige stand van zaken...
Hoe hoger je de clock maakt, hoe fijner de frequentiestapjes worden.

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

Golden Member

Ik heb er een Xtal van 20Mhz aan gehangen, geluid wordt er idd wel iets beter van.
Ik ben begonnen met het programmeren van µc en werd getipt (mede op dit forum) over de cursus www.picbasic.nl

Die gaat uit van een PIC 16F628A. Deze chip zag ik ook op mijn frequentieteller.

Wat is eventueel een betere of nieuwere PIC?

Fouten zijn het bewijs dat je het probeert..
Arco

Special Member

Er zijn er honderden, die bijna allemaal sneller zijn en meer kunnen... ;)
Iets als de 16F1827/16F1847 is pin-compatible met de 16F628A...

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

Kijk ook eens na welke controllers de lite versie ondersteund.
Maar een andere controller geeft geen garantie op een betere klank.

LDmicro user.
Bavelt

Golden Member

Ik heb inmiddels met het Xtal een stuk beter geluid. (alleen de 'draaggolf' er nog uit filteren.
Het programmeren (in circuit) gaat nu ook goed. De Lite versie van Proton heb ik inmiddels ook vervangen door een volledige. Dus geen limieten meer van 50 regels, etc.

Ik heb inderdaad begrepen dat er heel veel µc's in omloop zijn.
Alleen: hebben ze allemaal hun eigen instructieset?

Hoe zie je dan (als nieuweling) door de bomen het bos nog? Of zitten er 'standaards' bij (pin compatible is natuurlijk al heel fijn zoals in het voorbeeld van Arco).

Ik was al heel blij met de cursus PIC programmeren op www.picbasic.nl om een begin te krijgen.

Fouten zijn het bewijs dat je het probeert..
Arco

Special Member

Alleen: hebben ze allemaal hun eigen instructieset?

Ze zijn ingedeeld in wat groepen:

- 10Fxx
- 12Fxx
- 16Fxx
- 16F1xxx
- 18Fxx
- 24Fxx
- dsPic
- PIC32

Binnen een groep zijn de instructies vergelijkbaar. Wel kunnen er verschillen in namen en bits van SFR registers zitten.
(aangezien functionaliteit steeds verder groeit, komen er ook steeds meer SFR's bij om zaken in te kunnen stellen. Ook de CONFIG regs bijvoorbeeld)

Bij Microchip kun je met 'parametric search' pics vergelijken en zien welke peripherals erin zitten...

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

Die instructieset is niet van belang als je in Protonbasic programmeert, maar ik vermoed dat je de benamingen van poorten e.d. bedoelt.
Daarom als beginner een goede raad, spring niet van de ene controller naar de andere als er iets niet onmiddellijk klopt, tracht u te houden aan een paar controllers waar er veel software van te vinden is en die in de vingers te krijgen.
Later is de overstap veel makkelijker.

Voor nu blijf bij die 16F628a tot je die beter kent.

edit: en ik denk dat je hardwarefouten maakt als je die 4Mhz op een counter ziet en niet op de OSC pinnen meet, als ik tijd heb morgen ga ik dat allemaal eens proberen.

[Bericht gewijzigd door MGP op woensdag 31 juli 2019 22:14:54 (15%)

LDmicro user.
Arco

Special Member

Ach,

Het verschil tussen de 628A en de 1827 is niet zo groot, maar je hebt dan wel veel meer mogelijkheden en hij is een stuk goedkoper...

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

Op 31 juli 2019 22:14:34 schreef Arco:
Ach,Het verschil tussen de 628A en de 1827 is niet zo groot, maar je hebt dan wel veel meer mogelijkheden en hij is een stuk goedkoper...

Ik zeg niet dat hij die niet mag gebruiken, maar zal dat zijn probleem oplossen? denk het niet...
Zal waarschijnlijk niet zoveel support meer krijgen want wie gebruikt die ;)

Goedkoper? ik heb er verleden week gekocht op CO, 1euro/stuk en geen Ch...zen want ze programmeren voortreffelijk, mijn Ch.. durven al eens onbereikbaar te zijn met mijn Pickit2.. en nu al helemaal want ze liggen al in de container.
e:/wil nu ook niet kappen op de Ch.. want ik heb ook veel goede dingen gekocht, maar controllers ga ik daar niet meer kopen.

LDmicro user.