Vraag:
Kunnen microcontrollers op willekeurig lage klokfrequenties draaien?
endolith
2009-12-16 09:58:52 UTC
view on stackexchange narkive permalink

In de datasheet voor de ATTiny13A staat bijvoorbeeld de Min-frequentie van 0 MHz. Betekent dit dat de klok op elke willekeurige lage frequentie kan draaien zonder nadelige gevolgen? Ik neem aan dat het een lagere stroom trekt bij lagere kloksnelheden? Betekent 0 MHz dat u de klok volledig kunt stoppen, en zolang er nog stroom is, zal deze de toestand voor onbepaalde tijd onthouden?

Ik zou hieraan willen toevoegen, dit is een uitstekende vraag. De meeste senior EE's nemen niet de tijd om feitelijk datasheets te lezen en erover na te denken, wat ofwel een aanvulling voor u is of een belediging voor hen, ik zou beide willen impliceren.
Ik ben er niet helemaal zeker van dat de interne RC-oscillator is uitgeschakeld, tenzij je dit specifiek instrueert (via verschillende energiebesparende opties). Ik weet niet zeker waarvoor het wordt gebruikt, maar in ieder geval voor EEPROM en waarschijnlijk ADC.
@jippie welke interne RC zegt u? ATMegaX heeft bijvoorbeeld de interne RC voor de systeemklok (normaal 8Mhz, met optionele div 8-voorschrijver), het heeft de watchdog-oscillator. De systeemklok is zekering geselecteerd en is waarschijnlijk uitgeschakeld bij gebruik van een externe klok. De anderen, zoals je zei, kunnen worden uitgeschakeld door energiebesparende modi, maar ik betwijfel of ze zullen stoppen bij de systeemklok.
Vijf antwoorden:
#1
+75
todbot
2009-12-16 10:07:32 UTC
view on stackexchange narkive permalink

Ja. Staat er op de datasheet "volledig statische werking", dan kun je deze op elke snelheid klokken, zelfs 0 Hz. Een "dynamische" chip moet een klok hebben met een bepaalde snelheid, anders verliest hij zijn status.

heb je een voorbeeld van een micro die dit mogelijk maakt?
Microcontrollers die flash op de chip bevatten, kunnen een minimale (en maximale) flashkloksnelheid specificeren bij het schrijven naar flash. Dit is echter niet van toepassing bij het lezen van flash.
MrEvil, de Atmel AVR ATtiny-serie die in de vraag wordt genoemd, is volledig statisch, aangezien ik denk dat de meeste Atmel AVR-chips. En ik denk dat de meeste PIC-microcontrollers van Microchip.
Ik zou MSP430s willen toevoegen aan de lijst van todbot. De meeste moderne microcontrollers doen dat, de dynamische soort is lastig om voor te ontwerpen, dus de meeste niet.
Eigenlijk denk ik dat de ADC in de ATTiny13A niet werkt bij lage frequenties, misschien vanwege het verval van de sample-and-hold-condensator? "Standaard vereist de opeenvolgende benaderingscircuits een ingangsklokfrequentie tussen 50 kHz en 200 kHz om een ​​maximale resolutie te krijgen. ... De ADC-module bevat een presaler, die een acceptabele ADC-klokfrequentie genereert vanaf elke CPU-frequentie boven 100 kHz."
endolith - Ik ben het ermee eens, ADC's werken meestal niet bij lage frequenties. Voor zover ik kan nagaan, blijft al het andere op praktisch alle moderne microcontrollers prima werken tot aan "0 Hz", oftewel "pauze voor onbepaalde tijd". In het bijzonder hebben veel microcontrollers een "energiezuinige slaap" -modus die alle klokken stopt, totdat iets - meestal een persoon die op een knop drukt - het wakker maakt en het hervat waar het was gebleven. Http://en.wikipedia .org / wiki / Static_logic_ (digital_logic)
De RCA 1802 (http://en.wikipedia.org/wiki/RCA_1802) was, AFAIK, de eerste micro die statische werking toestond, lang geleden in 1976.
De ADC kan echter worden beschouwd als een randapparaat vanuit het perspectief van het klokbereik voor de CPU-kern. Statische werking lijkt geen probleem te zijn. Je kunt een sequentieel circuit samenstellen met behulp van TTL-chips en het zal werken tot willekeurig lage kloksnelheden. Het zijn zaken als de aanwezigheid van DRAM die moeten worden vernieuwd en die uitdagingen creëren.
@Kaz: Bij het fabriceren van een NMOS-apparaat is het energiezuiniger om een bus onvoorwaardelijk hoog te trekken op de ene helft van een cyclus en vervolgens voorwaardelijk laag te trekken tijdens de andere helft van een cyclus, dan om een passieve pull-up te gebruiken die sterk genoeg moet zijn omtrek de bus binnen een cyclus hoog.De eerste benadering zal stroom verspillen die evenredig is met de * werkelijke * buscapaciteit per cyclus, terwijl de laatste stroom verspilt evenredig met de werkelijke bronstroom van een circuit waarvan de slechtste (laagste) stroombron voldoende moet zijn om de slechtste stroom te leveren.case (maximale) bus capaciteit.
@Kaz: Veel NMOS-apparaten zoals de 6502 gebruikten dus dynamische logica voor zaken als busritten, en niet alleen dynamisch "geheugen".Het gebruik van dynamische busaandrijving betekent dat capaciteit / lekverhoudingen moeten worden gewaarborgd, maar biedt verder veel ruimere marges op veel andere fabricageparameters dan mogelijk zou zijn in een volledig statisch ontwerp.
#2
+23
Kortuk
2009-12-16 10:41:34 UTC
view on stackexchange narkive permalink

Ik plaats een ander antwoord, alleen omdat de laatste vraag die je had nog niet eerder was beantwoord.

Todbot is helemaal correct. Het zal ook minder stroom verbruiken bij lagere snelheden. Het betekent ook dat als je de klok van bijvoorbeeld een andere processor levert, je hem op elk moment kunt stoppen en later kunt beginnen met klokken, zolang je niet sneller gaat dan de maximale snelheid, alles goed komt.

De chips die ik heb, veranderen in een orde van grootte tussen een 32768Hz-oscillator en een 1MHz-oscillator. Ik heb applicaties gehad waar ik geen snelheid nodig had, ik had gewoon een ander klein mannetje nodig dat wat basisgegevens voor me afhandelde.

Ik hoop dat dit helpt.

Ik heb altijd al de kloklijn van een microcontroller willen laten draaien met een drukknop. Laat de mens de klok zijn. :) Op een serieuze noot, echt leuke dingen aan deze statische ontwerpen is dat hun stroomverbruik lineair is met de kloksnelheid: vertraag de klok en gebruik minder stroom. Dit kan erg handig zijn.
Ja, maar ik merk wel op dat het stroomverbruik een lineaire functie is met een offset, zelfs zonder klok verbruiken ze nog steeds stroom, vooral als er uitgangen worden aangestuurd. We hebben net nieuwe stagiaires op mijn werk, ik zal voorstellen dat we een drukknop gebruiken en kijken wat er gebeurt.
@todbot Leuk idee. :-) Maar zorg ervoor dat je de drukknop ontkoppelt.
Probeer met een "grind crank" (zoals in het jargon dat betekent: http://www.jargon.net/jargonfile/g/grindcrank.html): -)) (en ja, vele jaren geleden heb ik er een gebouwd om door code te stappen toen ik Turbo Pascal op school gebruikte :-)
@todbot Het is niet echt vergezocht of moeilijk, als je een ruwe abstractie kunt accepteren. Er zijn verschillende voorbeelden van mensen die dergelijke gadgets gebruiken om te leren hoe computers werken. Myke Predko heeft een heel goed boek, en het wordt zelfs geleverd met PCB's (hoewel niet voor het computerproject): http://www.amazon.com/Digital-Electronics-Guidebook-Michael-Predko/dp/0071377816/ref=sr_1_1 ? ie = UTF8 & qid = 1260970753 & sr = 8-1
-1
@Axeman - het jargon-bestand beweert dat de "grind crank" mythisch is. Hier is bewijs van het tegendeel: http://www.computerhistory.org/babbage/. De slinger aan de rechterkant drijft de computer aan; die aan de linkerkant drijft de printer aan. Je kunt een beter idee krijgen van de grootte van het ding door de video op die pagina te bekijken; het is ongeveer 2,4 meter lang.
@PeteBecker: De Curta Calculator had ook een slinger, die daadwerkelijk omhoog of omlaag kon worden getrokken om optellen of aftrekken te selecteren.
#3
+18
supercat
2011-04-09 22:11:49 UTC
view on stackexchange narkive permalink

De meeste moderne microcontroller-ontwerpen werken met elk patroon op hun klokingang, op voorwaarde dat er geen hoge puls onder een bepaalde minimale lengte is, geen lage puls onder een bepaalde minimale lengte en geen laag-hoog-laag of hoog- laag-hoog pulspaar is onder een bepaalde lengte. Wat er in wezen gebeurt, is dat nadat de chip alle acties heeft uitgevoerd die zijn gekoppeld aan een bepaalde klokflank, de chip zich in een toestand bevindt waarin hij niets anders doet dan wachten op de volgende klokflank. Als de volgende klokflank niet binnen tien dagen arriveert, zal de chip (tenzij de chip een externe waakhond heeft) in dezelfde staat verkeren alsof de rand was aangekomen op het moment dat de chip er klaar voor was.

Merk op dat in het algemeen het pauzeren van de klok op een microcontroller het stroomverbruik aanzienlijk zal verminderen, maar niet zoveel als het gebruik van de "slaap" -functie. Het stroomverbruik van de meeste microcontrollers in de "run" -modus kan vrij goed worden geschat als een constante ruststroom plus een bepaalde hoeveelheid stroom per cyclus per seconde (wat misschien meer 'natuurlijk' wordt uitgedrukt als lading per cyclus). Een chip kan bijvoorbeeld een ruststroom hebben van 10uA, plus een stroomsterkte van 0,1mA / MHz (100pC / cyclus). Het laten draaien van zo'n chip op 10 MHz zou een stroom van 1,01 mA opleveren. Als je het op 1 MHz gebruikt, zou dit 0,11 mA opleveren. Als je het op 100 KHz laat draaien, krijg je 0,02 mA. Als je het op 1Hz draait, levert dit 0,0100001mA op. Aan de andere kant kan de chip een slaapstroom van 1uA bieden. Over het algemeen worden door het inschakelen van de slaapmodus delen van de chip die niets nuttigs doen terwijl de chip slaapt, volledig uitgeschakeld, waardoor eventuele lekstroom in dergelijke gebieden wordt vermeden. Het zal in sommige gevallen ook de spanning naar gebieden zoals registerbestanden verlagen tot een niveau waarop de registerbestanden hun inhoud kunnen bevatten, maar er niet erg snel toegang toe hebben (aangezien ze helemaal niet toegankelijk zijn, maakt de toegangssnelheid niet uit) .

Sommige oudere microprocessors, microcontrollers en andere apparaten hadden maximale kloktijden en / of kloktijden. Dergelijke processors maakten gebruik van dynamische logica om schakelingen te sparen. Beschouw als voorbeeld van dynamische logica een schuifregister: een typisch statisch registerbit vereist een schakeling met twee transistors om de waarde vast te houden, terwijl een dynamisch registerbit de waarde op de poort van een uitleestransistor vasthoudt. Een tweefasig geklokt dynamisch schuifregister kan in NMOS worden gerealiseerd met behulp van vier NFET's en twee weerstanden per bit. Voor een statisch schuifregister zijn acht NFET's en vier weerstanden per bit nodig. Dynamische logische benaderingen zijn tegenwoordig lang niet zo gebruikelijk. In de jaren zeventig was de poortcapaciteit aanzienlijk en kon er niet vanaf worden gekomen. Er was dus geen bijzondere reden om er geen gebruik van te maken. Tegenwoordig is de poortcapaciteit over het algemeen veel lager, en chipfabrikanten proberen deze actief verder te verminderen. Om dynamische logica betrouwbaar te laten werken, zou vaak opzettelijk moeten worden gewerkt om de poortcapaciteit te vergroten. In de meeste gevallen zou het extra chipoppervlak dat nodig is om de capaciteit te vergroten, net zo effectief kunnen worden gebruikt om meer transistors toe te voegen om de capaciteit overbodig te maken.

U noemt NMOS en IIRC er is een verband tussen de populariteit van dynamische logica en het nog niet beschikbaar zijn van complementaire MOS (CMOS).
@jpc: Ik heb schema's van verschillende NMOS-chips bestudeerd - sommige tot in detail, waaronder de Atari 2600 TIA die een echt geniaal werk is - mensen vinden er drie decennia later nog steeds nieuwe dingen mee te doen. Ik denk dat een voordeel van NMOS versus CMOS vanuit het oogpunt van ontwerpgemak is dat 'shoot-through' (onbedoelde gelijktijdige activering van hoge- en lage-zijaandrijving) een non-factor is, hoewel ik enige nieuwsgierigheid zal bekennen waarom CMOS draait niet op een spanning die laag genoeg is zodat het cross-over-punt op een ingang hoge en lage stuurprogramma's zou laten staan, in plaats van beide te activeren.
@jpc: In NMOS is het mogelijk om een ​​XOR-poort te implementeren met twee transistoren en twee weerstanden, als de ingangen voldoende "sterk" zijn. Zelfs als je omvormers aan beide ingangen moet toevoegen, zou een xor-poort met vier transistors en vier weerstanden beter zijn dan veel andere benaderingen. Ik heb de gebruikte benadering echter nog nooit gezien, hoewel ik rond 1978 een soortgelijk circuit ontwierp met behulp van BJT's (het ontwerpconcept zou beter werken met MOSFETS, maar ik wist er niets van af).
+1 - Ik heb het gevoel dat het echte juweeltje dat u hier noemde, is dat lagere kloksnelheden weliswaar energie besparen, maar niet zoveel als slaapmodi die specifiek zijn ontworpen om energiebesparing te optimaliseren. Mijn gevoel zegt me dat je meer energie zult besparen door een snelle oscillator te gebruiken in combinatie met een verstandig gebruik van de slaapmodus, terwijl je constant op een heel lage frequentie loopt.
@JoelB: Dat hangt van veel factoren af. Bij veel processors zit er een vertraging tussen het inschakelen van een snelle klok en het daadwerkelijk kunnen gebruiken; gedurende deze tijd verspilt men stroom. Als men b.v. 100x / seconde, is het misschien beter om continu langzaam te rennen dan constant te starten en te stoppen. Aan de andere kant, als iemand de snelle klok gaat starten en stoppen, kan het goed zijn om de hoeveelheid tijd die hij loopt zo klein mogelijk te maken zonder extra energie te verspillen. Bijvoorbeeld...
... als de CPU een 'hoge kernspanningsmodus' heeft die tot 16 MHz kan lopen en een 'lage kernspanningsmodus' die tot 4 MHz kan lopen, is schakelen tussen de 'stop'- en' 4 MHz'-modus misschien beter dan schakelen tussen "stop" en "1 MHz" -modi als de eerste minder tijd zou vereisen wakker te zijn; zelfs als het overschakelen naar de 16Mhz-modus de waaktijd verder zou verkorten, zou het de extra energiekosten waarschijnlijk niet waard zijn.
@supercat - Het hangt absoluut af van tal van factoren (sommige niet kwantificeerbaar). Uiteindelijk is energie koning en zou je je klokschema moeten afstemmen op de kennis van je applicatie / processor en hoeveel / vaak er verwerkt zal worden. Ik wilde alleen maar wijzen op het "bos-door-de-bomen" -perspectief dat u bracht door de slaapmodus in deze discussie te noemen. Mijn gevoel zegt me dat er nog steeds veel productiecode is met 'while (1) {_ nop;}' waarvan goedwillende ingenieurs denken dat ze het meeste stroom besparen door langzamer te werken in plaats van de slaapmodus correct te implementeren.
@JoelB: Uw opmerking deed me denken aan een probleem dat sommige collega-ingenieurs enige tijd terug hadden: de audio-uitvoer van het systeem zoemde soms hinderlijk. Het bleek dat wanneer het besturingssysteem ontdekte dat de CPU niets te doen had, het in slaap zou vallen. Dit verminderde stroomverbruik, waardoor de VDD enigszins kon stijgen. Elke 10 ms werd de CPU wakker om te zien of er meer te doen was. Het probleem is opgelost door iets toe te voegen als: "do {} while (audio_powered_on ());" vóór de "sleep ()" -instructie in de idle-taak, omdat in die situatie het besparen van energie * niet * koning was.
@supercat - Het klinkt alsof dit verhaal het tegendeel bewijst. Een goed gespecificeerde / gereguleerde / gefilterde / ontkoppelde voeding had zo moeten zijn ontworpen dat deze geen waarneembare effecten op de audio zou hebben boven de verwachte operationele belasting van de processor. Dus het lijkt erop dat stroom (of meer specifiek _power supply design_) nog steeds koning is. Geweldige oplossing trouwens!
Wat bedoel je met slaap met minder stroom dan een klokstop?Op atmel bijvoorbeeld, het enige dat verschilt tussen slapen en rennen, is welke klokken worden gestopt.Is er niets anders wat een slaap kan doen?Tenzij het de stroom naar secties onderbreekt?
@JoelB: Het filteren van stroomtoevoer heeft drie aspecten: (1) voorkomen dat rommel naar binnen komt;(2) voorkomen dat rommel van buiten naar binnen komt;(3) voorkomen dat veranderingen in de stroomafname door verandering van de interne spanning.Optimaliseren voor # 1 zal over het algemeen een negatieve invloed hebben op # 3.Als het apparaat volledig aparte voedingen had gebruikt voor de audio en de CPU, zou dat het probleem hebben voorkomen, maar was er meer stroomvoorzieningselektronica nodig;het probleem was dat de CPU en het audiocircuit zich aan dezelfde kant van hetzelfde filter bevonden.
@SectoKia: Het alternatief was niet tussen klok-stop en slaap, maar tussen slapen wanneer inactief versus het uitvoeren van nutteloze instructies om een meer uniform stroomverbruik te garanderen.Hoewel veel CPU's de stroom naar significante secties verminderen in hun slaapmodi met een lager energieverbruik.
#4
+12
flup
2013-12-19 15:28:24 UTC
view on stackexchange narkive permalink

Ja, u kunt de klok volledig stoppen en op een later tijdstip opnieuw starten zonder gevolgen. Je zou zelfs de klok kunnen vervangen door een drukknop en je programma letterlijk stap voor stap kunnen doorlopen (frequentie: ongeveer 0,1 Hz).

Het vermogen is bijna lineair met de frequentie: bij 10 MHz verbruikt de microcontroller 10 keer zo veel veel vermogen als op 1 MHz. Dit betekent echter niet dat bij 0 Hz het verbruik helemaal nul is. Er is altijd sprake van statische dissipatie, maar dat is erg laag, meestal 1 uA of minder.

PS: merk op dat de ADC een minimale werkfrequentie heeft. Als de frequentie te laag is, zal de condensator waarover de spanning wordt gemeten te veel ontladen en zal uw meting verkeerd zijn.

Druk op de knop?Hoe zit het met debouncen?
Debouncen is vereist.
#5
+10
Buzby
2013-04-17 15:08:18 UTC
view on stackexchange narkive permalink

Toen ik te laat kwam op deze vraag, deed het me denken aan een project dat ik een tijdje geleden zag.

Het is een bat-detector die meestal een PIC gebruikt die op nul Hz draait en dan wordt geklokt door het signaal dat het detecteert.

http://www.micro-examples.com/public/microex-navig/doc/077-picobat.html

In [dit project] (http://scanlime.org/2008/09/using-an-avr-as-an-rfid-tag/) is het signaal zowel de klok * als de stroom naar de chip *. :)


Deze Q&A is automatisch vertaald vanuit de Engelse taal.De originele inhoud is beschikbaar op stackexchange, waarvoor we bedanken voor de cc by-sa 2.0-licentie waaronder het wordt gedistribueerd.
Loading...