benleentje
Golden Member
Op zaterdag 8 november 2025 21:42:16 schreef MNM(tm):
Geen idee hoe je het doet, maar zoals jij het uitlegt, komt het als eenvoudig en duidelijk over! Ik krijg er zin in!Waarschijnlijk is je boek op dezelfde wijze geschreven?
Ja daar ben ik het mee eens.
Maar ik denk ook dat dat komt door hoe verilog is opgebouwd. Maar er zijn wel een een paar dingen die je moet weten.
De vergelijking met c :
Ik wou geen vergelijking maken met C, Maar mee dat er dingen herkenbaar zijn.
Het enige wat ik nu even niet snap is dit.
Ik kan het natuurlijk ook opzoeken maar ik denk ook dat er meer zijn die aich afvragen wat word er mee bedoelt.
if (reset) counter <=0;Ik lees dit als.
Voer een reset uit als counter kleiner of gelijk is aan 0
Maar volgens je uitleg begrijp ik dit:
Als het reset signaal actief is maak counter gelijk aan 0
Wat ik lees is dat er een conditionele voorwaarde wordt gesteld "if (reset)", wat een true of en false kan opleveren. In geval van true wordt de navolgende 'instructie' uitgevoerd: "counter <= 0" (zet waarde 0 in het register met de naam 'counter').
free_electron
Silicon Member
Professioneel ElectronenTemmer - siliconvalleygarage.com - De voltooid verleden tijd van 'halfgeleider' is 'zand' ... US 8,032,693 / US 7,714,746 / US 7,355,303 / US 7,098,557 / US 6,762,632 / EP 1804159 - Real programmers write Hex into ROM
we gaan hier verder over logica: https://www.circuitsonline.net/forum/view/message/2618538#2618538
fred101
Golden Member
www.pa4tim.nl, www.schneiderelectronicsrepair.nl, Reparatie van meet- en calibratie apparatuur en maritieme en industriele PCBs
Als er iemand een keer (als het ontwerp af is) PCB's gaat leveren en de geprogrammeerde IC's ga ik er ook 1 maken. Zeker als hij zonder PC kan werken.
Misschien kunnen we er tzt een soort van groep project van maken. PCBs en programmeren is voor mij een erg grote stap en geen geschikte apparatuur, maar bv SMD solderen is geen probleem, ik heb genoeg ervaring en apparatuur. Dat kan ik dan bv wel voor anderen doen die daar een probleem mee hebben, dingen testen of afregelen/kalibreren kan ik ook (Ik heb zelfs een Tek 576 als vergelijk) Ik kan ook bv een tutorial/manual schrijven, dat heb ik ook voor een VNA gedaan. Die cursus werd toen in India op een universiteit gebruikt (ze vroegen keurig toestemming). Ik speel al zo'n 15 jaar met curvetraces)
free_electron
Silicon Member
Professioneel ElectronenTemmer - siliconvalleygarage.com - De voltooid verleden tijd van 'halfgeleider' is 'zand' ... US 8,032,693 / US 7,714,746 / US 7,355,303 / US 7,098,557 / US 6,762,632 / EP 1804159 - Real programmers write Hex into ROM
het ganse project staat op github en de borden kunnen bij jlcpcb gemaakt worden.
geprogrammeerde ic's zijn niet nodig. De processor en cpld zijn zo gekozen dat je geen kunst en vliegwerk nodig hebt. de USB poort op het bord kan zowel de processor als CPLD laden.
Geen nood aan programmeer dongles.
de processor gebruikt UPDI (seriele poort via de FTDI chip) en gratis software van ATMEL (microchip) om die te laden. De CPLD gebruikt JTAG , ook over de FTDI chip (MPSSE mode). direct te laden vanuit Quartus.
Ik ga een FT2232 gebruiken (2 seriele poorten, ene als UPDI/UART aan de processor, de tweede als JTAG aan de CPLD.
De keuze van de cpu en cpld zijn heel zorgvuldig zo gedaan dat je geen programmers, dongles, pinheaders en weetikveel wat rommel nodig hebt ( die dan weer drivers nodig hebben, niet werken op jouw operating system, of niet de juiste versie zijn. ). Een (echt) FTDI chippie werkt overal.
Ik heb zelf een gloeiende hekel aan die dongles. ik heb er een ganse schuif vol van. J-links, seggers, Keil Ulinks, ST programmers, Hitech xmos en nog een gans pak andere. Allemaal met hun eigen software die alleen werkt met versie xyz op operating systeem abc.. Ik heb ene tijd geleden een tiental seggers weggesmeten. die dingen waren peperduur. maar het zijn oude hardware versies die niet meer ondersteund worden met drivers alleen voor windows 98. kopen kopen en blijven kopen. Gedaan ermee. Als het niet over een seriele poort kan werk ik er niet meer mee. Processors moeten uit de fabriek komen met een usb/uart bootloader. Er zelf ene inflashen is ook weer ene kip-ei probleem.
spuugzat ben ik het.
Het ganse ontwerp is zo in elkaar gezet dat je niks nodig hebt op een soldeerbout na.
allis is 0603 of groter en ik mijd zelfs dingen zoals tssop .Op de processor en cpld na is niks 0.5mm en een paar i/o expanders. allemaal 1.27mm so8 verpakkingen.
de volgende stap nu is een partieel board maken met processor en cpld en een deel van de generator. zodat ik de DAC en analoge blokken kan testen. daarnaa volgt het echte moederbord.
[Bericht gewijzigd door free_electron op (12%)]
En daar ben ik het volledig mee eens. Ik heb ook een bloedhekel aan al die proprietary protocollen en interfaces om een chip iets zinnigs te kunnen laten doen. Het moet met I2C of SPI kunnen. De rest kan de boom in. JTAG vind ik ook een irritante interface.
Ik vind het een zeer mooi project!!
free_electron
Silicon Member
Professioneel ElectronenTemmer - siliconvalleygarage.com - De voltooid verleden tijd van 'halfgeleider' is 'zand' ... US 8,032,693 / US 7,714,746 / US 7,355,303 / US 7,098,557 / US 6,762,632 / EP 1804159 - Real programmers write Hex into ROM
Een klein update. In maart twee hartaanvallen gehad. Een klein in de winkel waar ze de ambulance opgebeld hebben. Aangezien er troponine in mijn bloed zat hebben ze me daar gehouden voor een dag observatie. Een stresstest gedaan met radioactive tracer. daar was niet echt iets op te zien , maar de EKG reageerde fel. Dus hebben ze me nog een dag gehouden. De tweede dag ging plotseling de hartmonitor in alarm en op 10 seconden tijd stonden er 5 mensen op de kamer. Ik vroeg "wat is er aan de hand" en toen sloeg de pijn toe.
Bleek dat ik een 95% blokkage had in the LAD. Hij moet dichtgeklapt zijn in het hospitaal. Ze noemen dat een "widowmaker". Als dat ding dichtslaat heb je maximum 5 minuten. slechts 1 op 10 patienten overleeft dat buiten het hospitaal. Ik weet niet meer wat ze allemaal gedaan hebben. Bloedverdunners, vaatverwijders, nitroglycerine, amiodarone en nog een pak ander spul. De dag erna hebben ze een angiogram gedaan via de pols (ze doen dat niet meer via de liesstreek. Pols werkt even goed en het is dichterbij) . Daarop was de blokkage te zien. Via een ballonnetje hebben ze dat opengedaan, de verkalking (of wat het ook was) er uit gezogen en een metalen stent geplaatst. In totaal hebben ze me daar 12 dagen gehouden. Er is anders nergens blokkage. Ze zat in een scherpe bocht en moet er al heel lang gezeten hebben en traag gegroeid over decades.
Daarna revalidatie. 2 maand niks doen. Daarnaa stilletjes terug beginnen werken aan een rustig tempo. Ik heb nog steeds last van ritmestoornissen maar ze hebben nu de juist "mix" en "dosering" en het is onder controle. Ik zal ooit wel nog een ablatie nodig hebben om de foutende electrisch knopen weg te branden (Pulsefield ablation) , maar dat is nog niet voor direct. Hangt er van af hoe snel het evolueert.
Ik vroeg aan de cardioloog of ik mijn soldeerbout en oscilloscoop moet meenemen dan. LOL.
Nu ter zake. Ik ben stilletjes aan ook terug naar dit ding aan het kijken. Ik heb ondertussen Claude Opus 5 onder de knie en die schrijft nu alle code voor mij. Direct in de arduino omgeving. Claude kan die direct aansturen (in tegenstelling to stmcube) . Ik heb een setup gemaakt met een CDC class en command interpreter. Het commando :BOOTLOADER herstart de USB stack in DFU mode ( kan ook als je de BOOT pin laag trekt , maar ik doe het via software. Claude kan het bord in bootloader gooien , de nieuwe firmware flashen en herstarten. De command interpreter heeft functies om alle interne variabelen te manipuleren. Claude voegt daar zelf aan toe. Geen nood aan dongles of STlink of ander gemeuk. Bordje pakken, in usb pluggen met BOOT laag , Claude vindt dat de ding, laadt de initiele firmware kan daarna gans het ding aansturen. Hij kan rondproben in de functionaliteit en lost zijn eigen fouten op.
Er is dus ook geen nood aan het eindeloos kip-ei bootloader probleem. De STM32 heeft een DFU over USB aan boord. ik gebruik ook geen eigen bootloader. Het ding start gewoon op als CDC en gedraagt zich als een seriele poort. Er is zelfs geen driver nodig. Windows heeft dat aan boord. Ik kom fysiek niet meer aan dat bord na de initiele boot. Mijn software kan de processor zelf in DFU gooien.
Werk 99.9% vlekkeloos. Als het fout gaat is het omdat mijn instructies niet duidelijk waren.
De hardware is een stuk eenvoudiger geworden en goedkoper. Weg met de CPLD , FTDI chip , geen Atmel meer , geen UPDI. Weg met de DACS en haast alle analoge meuk. Geen analoge dure , unobtainium (ze worden schaars) multiplier meer of stroombron sweep generator. 1 processor doet alle werk.
Een STM32G474. De DMA controller stuurt direct de twee interne 12 bit dacs ( vertikaal en horizontaal) vanuit lookup tabellen. Die worden berekend met simpele functies: sweep de basis van 0mA naar 1mA en de collector spanning van 0 naar 7 volt. go. De tabellen worden berekend en geladen. DMA doet de rest. Een tweede DMA controller stuurt de weinige externe functies aan : de multiplex mosfets , en de sturing voor de twee cursor "blips": dat zijn gewoon een paar 4066 die een +/- stuurstroompje injecteren in het terugkerend signaal om een "dimpeltje" te maken. Domme summing amplifier die 1 volt optelt of aftrekt of niks doet. Dat is ook een kwestie van 2 waardes door te geven aan het DMA kanaal en klaar. Een aantal analoge ADC ingangen meet de stuurspanning en stroom en de last spanning en stroom. De adc's hebben digitale comparatoren aan boord. Een kleine berekening in the "trage" hoofdlus zet de max waarde voor collector stroom en max waarde voor dissipatie. Als dat triggert schakelen we de DAC af en de blanking aan. Het effect is dat het aansturen stopt (dacs uit) , en de curve op het scherm ook daar afknipt. je krijgt Dan de mooie waaier die afgekort wordt. Aangezien voor dissipatie we weten wat de tabelwaarde van de DAC is kunnen we de grens vooraf berekenen.
Gans die sturing draait puur op DMA zonder interventie van het hoofdprogramma. Ik kan dat hoofdprogramma letterlijk stoppen : dat beeld blijft draaien aan 60 scans van 6 curves elk. Geen geflikker op het scherm (analog scoop in x/y mode met blanking) . En het vreet geen cycli van de processor. De processor draait een wachtlus.
Claude weet ook hoe je een correcte rotary encoder met software debouncing en velocity maakt.
Alle waardes die door de user kunnen ingesteld worden zitten in een tabel. elke regel in de tabel houdt de minimum,maximum en actieve waard bij alsook een paar vlaggen die aangeven of deze parameter velocity doet, of hij overrolt van max naar min of als hij clipt op max en min en of de gelezen waarde realtime is of slechts na klikken.
Er is een globale variabele die aangeeft welke waarde de encoder moet manipuleren. Bevestigen is met clikken. als je een andere functie kiest : abort.
De logica is een simpele statemachiene waar de gebruiker een functie knop in duwt , die kiest de juiste waarde om te koppelen aan de encoder en klaar. alles is gewoon variabelen manipuleren. de DMA engine pikt die op en doet het timing werk.
Geen RTOS of ander operating systeem. alles bare metal.
De resterende electronica is niks anders dan twee gainstages met vaste gain. De DACs zijn 12 bit. dus op 40.96v max is de kleinste stap 10mV. meer dan accuraat genoeg voor ene scoop in 5v/div mode (40v piek op het scherm). voor de basis/gate is de max drive 10v / 100mA.
De ADC's zijn 12 bit maar met oversampling haal je er 16 bit uit. Ik gebruik 4 adc's : twee voor spanning en twee voor stroom. zels als de gainstage "plooit" en de DAc niet kan volgen , meet ik toch de correcte waarde. de ADC's draaien ook mee in de DMA engine. Na de meting wordt een tabel opgemaakt met beide tromen en beide spanning , per cursor (er zijn 2 cursors zodat je delta kan doen ). als je in chop mode zit krijg je een dubbele tabel met de waardes van het tweede kanaal ook. zo ken je delta tussen cursors maar ook tussen twee transistors doen. als alle meting klaar zijn zegt een vlag dat er data is. de hoofdlus pollt die , doet zijn ding om de LCD te updaten en cleart de vlag zodat de DMA engine opnieuw kan meten.
de i2c poort werkt al , ik moet nog de PCA9555 juist configureren. de PCA9555 genereert een hardware interrupt bij state change. ik krijg in het hoodprogramma dus een (debounced) keydown en een keyup event. een 16 bit getal vertelt me wie er ingedrukt is. De leds zitten in een bit array die in 1 keer geschreven wordt als er een update nodig is. (geen onnodige i2c traffiek) .
Voor de LCD gebruik ik "paginas". er is een array met "virtuele schermen". elk scherm is 2 regels van 40 karakters. De standaard print functies zijn uitgebruid ( door claude) om te printen naar die arrays. Ik kan dus netjes gans het scherm opbouwen in die virtuele paginas. de gebruiker kan dan kiezen welke "pagina" hij wil zien. schakelen is razendsnel aangezien alle paginas altijd up-to-date zijn. Als de pagina update routine klaar is zet hij het "Dirty" bit van de desbetreffende pagina. een hardware interrupt stuurt dan de data naar het lcd scherm (4 bit parallel mode) . bijgevolg updated dat scherm razendsnel en aangezien we all 80 karaktersc schrijven zijn er ook geen problemen met "spook-karakters" als je bijvoorbeeld ven 4 digit naar 3 digit gaat in een veld. tijdens de opbouw van een pagina starten we met een leeg blad. en aangezien we het ganse blad schrijven is alles altijd proper.
ik ben nog aan het uitvlooien hoe ik de polariteit realtime kan switchen. Naast transistor curveschrijver kan je hem dan ok in 4 kwadrant mode gooien. zo kan je bijvoorbeeld zeners meten of bidirectionele TVS diodes.
Das gewoon kweste van de vertikale versterker mid-run van polariteit te schakelen en spanning tegen stroom te plotten. 0:0 is dan niet bodem-links of boven-rechts maar midden scoop. de eindversterker kan al polariteit schakelen om NPN PNP te kunnen doen. (niet via relais maar via de voeding te zweven met een enkele 40volt voeding kan ik van +40 naar -40 door in het nulpunt ofwel de grond van de bron aan de meetreferentie te hangen , ofwel de positive terminal van de bron aan de meet grond te hangen. twee mosfets doen dat werk vliegensvlug.
ik pas dit de komende weken de schema's aan. ik archiveer wat ik heb omdat dit de hameg sterk benadert. De "digitale" uitvoering is principieel het zelfde maar electronisch veel simpeler. twee fixed-gain versterkers aangestuur door twee dacs. de rest is software en DMA sturing.
wordt vervolgd ....
noot : het loont de moeite om met Claude aan de slag te gaan. hij kent de STM32 familie (en anderen ook) door en door en weet ook waar de bugs zitten in de HAL en hoe ze op te lossen. Aangezien hij via een DFU en CDC de volledige lus kan doen is de rest gewoon een dialoog. Hij schrijft code , test en verifeert . Hij kan zelfs simulaties doen van blokken code (via abstractie. hij stuurt python aan maakt een equivalent van de STM code en plot de boel.
Dit open gigantische deuren voor de hobby ! zeker voor mensen zoals ik gie geen zin hebben in keyboard rammen en code schrijven en uit te vlooien welk bit we nu juist nodig hebben of hoe dat DMA ding nu eigenlijk werkt en al die registers moeten geconfigureerd worden. of een 2000 pagine datasheet te studeren.
[Bericht gewijzigd door free_electron op (11%)]
Nou, dat is geen kleine update met dat ijzerwerk in je aderen. Onkruid vergaat niet...
Fijn dat je nog altijd onder ons bent en ik volg het verder met belangstelling.