PORTA setting doet niks als alles ingang is...
Special Member
PORTA setting doet niks als alles ingang is...
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?
Golden Member
Heb je een pull-up weerstand geplaatst bij S1? Anders werkt het ook niet.
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)
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.
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’.
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)?
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.
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
CMCON = 0x07
@lambiek: Waarschijlijk heb je dan portA voor output gebruikt, dan speelt het comparator verhaal niet mee...
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!
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.
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).
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...
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.
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.
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... )
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?
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.
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?
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...
Kijk ook eens na welke controllers de lite versie ondersteund.
Maar een andere controller geeft geen garantie op een betere klank.
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.
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...
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%)
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...
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.