Timerkrets med lastomkoppling på en mikrokontroller. Konkurrens om den bästa mikrokontrollerdesignen

Bild från Novelty Kitchen Timers


I amatörradioövningar behövs ofta en timer: exponering av fotoresisten, hålltid efter räffling, efter exponering, tillagning av dumplings, ägg (jag får ofta allt vatten att koka bort). Alternativen från Google fungerade inte för mig. Jag ville göra en timer som skulle ha 12 knappar och en 4-siffrig LED-indikator - jag använde röd för att inte exponera fotoresisten. För den här designen använde jag ATMEL AT89C2051 mikrokontroller, som hade legat i lager länge. Drivs av ett batteri.

Och nu är designen klar. Möt: en brutal amatörradiotimer med en uppehållstid från 1 sekund till 100 minuter i steg om 1 sekund eller från 1 minut till 100 timmar i steg om 1 minut.

För ungefär 10 år sedan utvecklade jag en timer på en LCD och en billig mikrokontroller PIC12C508 (Radiomagasin nr 5, 2004). Det är bra för alla, sedan dess har jag aldrig ens bytt batterier. Om det inte finns någon bakgrundsbelysning och knapparna i den designen var klockade, fastnar de. Och jag bestämde mig för att inte uppgradera den gamla utvecklingen, utan att göra en ny.

Programmet använder ett avbrott från TIMER0, som slås på i läge "2", d.v.s. till 8-bitars timerläge med automatisk laddning. I ett timeravbrott stängs indikatorns katoder av och data skickas till serieporten för att mata ut nästa siffra i indikatorn.
Efter att överföringen är slutförd anropas ett seriell portavbrott, där motsvarande indikatorkatod slås på och tangentbordet pollas.

Programmet tar upp lite mer än en kilobyte och är skrivet i KEIL-miljön. Källtexten och firmwarefilen bifogas.

Om du håller knappen "1" intryckt när du slår på timern, kommer timern att blinka med två extrema punkter och gå in i tidsräkningsläget i timmar och minuter. De där. att ställa in tiden till 01.00 betyder redan 1 timme. Du behöver bara ta hänsyn till att när den drivs av ett batteri kommer dess laddning att hålla i maximalt 10 timmar, det följer att för långa exponeringar måste timern drivas antingen från kraftfullare batterier eller från elnätet.

Eftersom min design monterades på knappar med Hall-sensorer kontrollerade jag inte anslutningsschemat för mekaniska knappar och en indikator med en gemensam anod. Om du stöter på några problem under implementeringen, skriv så hjälper jag till.

Foto av den monterade timern.


Bakifrån med ett urtag för batteriet; detta fodral har inget batterifack.

Video

En liten video där indikatorn blinkar på alla möjliga sätt - det här är slaget från kameraskanningen och den dynamiska displayen, den är inte synlig för ögat, indikatorns uppdateringstid är 20 ms.
Video med denna upplösning eftersom huset ligger på landsbygden och det finns 3G Internet.

Filer

Källtext i KEIL-miljön och firmwarefil för indikatorer med gemensam katod och gemensam anod.
🕗 05/04/14 ⚖️ 7,15 Kb ⇣ 27 Hej läsare! Jag heter Igor, jag är 45, jag är sibirisk och en ivrig amatörelektronikingenjör. Jag kom på, skapade och har underhållit denna underbara sida sedan 2006.
I mer än 10 år har vår tidning endast funnits på min bekostnad.

Bra! Freebie är över. Om du vill ha filer och användbara artiklar, hjälp mig!

I den tidigare artikeln skrev jag att detta är den senaste utvecklingen av en sådan enhet med sju-segments LED-indikatorer, men det visade sig att jag hade bråttom. Faktum är att denna design bara använder 40% av mikrokontrollerns minne, och det finns fortfarande ett oanvänt stift i mikrokontrollerporten (förutom RESET-stiftet). Därför beslutades det att rätta till denna orättvisa i förhållande till MK och lägga till ytterligare en lastkontrollkanal. Efter att arbetet är gjort används MK-minnet till 99% och alla MK-stiften används. Fullständigt namn på den modifierade designen:
"En tvåkanals termometer, en tvåkanalstermostat (termostat) med möjlighet att fungera i tid, en enkanals realtidstimer på en ATmega8 mikrokontroller och DS18B20 temperatursensorer"

Beskrivning och egenskaper för en tvåkanals termometer, termostat (termostat), enkanals realtidstimer
på ATmega8 och DS18B20

Eftersom denna design "uppstod" från den föregående - och beskrivs i detalj (alla egenskaper hos termometrar och termostater, driftlägen, svar på fel - förblev oförändrad), kommer jag bara att fokusera på innovationen - realtidstimern.

Realtidstimer

Introducerad i designen realtidstimer, som låter dig hantera din tredje last i realtid under 24 timmar och låter dig ställa in två tidsintervall för lastkontroll under dagen. Timern låter dig också ställa in ett tidsintervall för lastkontroll under dagen för varje temperaturkontrollkanal (termisk kontroll).
Vad menar jag med realtidstimer. I huvudsak är detta en intern klocka med en upplösning på 10 minuter. Under den första inställningen av enheten ställs den verkliga aktuella tiden in med en noggrannhet på 10 minuter, och sedan räknar timern 24 timmars intervall i 10-minuterssteg som en vanlig klocka.

Det diskreta med att räkna tidsintervall på 10 minuter antogs av två skäl:
— bekvämlighet med att visa information på en tresiffrig indikator, till exempel 22 timmar 40 minuter — 22.4
- belastningskontroll med en noggrannhet på 10 minuter är ganska tillräckligt för de flesta uppgifter (i verkligheten är noggrannheten 5 minuter - om du behöver slå på belastningen vid 7 timmar 35 minuter kan du ställa in antingen 7,4 eller 7,3)

Införandet av en timer ändrade något algoritmen för att arbeta med enheten (jag kommer att prata om operationsalgoritmen nedan). Nu genom att trycka på "Välj"-knappen kan du komma till två menyer:
— meny för inställning av temperaturgränser för termostater och tidsintervall för termostatdrift, tidsintervall för belastningsreglering med timer
— meny för att korrigera klockfrekvensen och ställa in aktuell tid.
Eftersom MK arbetar från en intern RC-oscillator (8 MHz), som inte är stabil och beror på både temperaturen på MK och matningsspänningen, låter klodig justera klockfrekvensnoggrannheten för specifika förhållanden. Och den aktuella tidsinställningsfunktionen låter dig ställa in aktuell realtid under den första inställningen eller förtydliga den om den skiljer sig mycket från realtid.
Timerindikationerna visas inte när enheten är i drift; du kan bara ta reda på "vad klockan är" när du går in i läget för att ställa in den aktuella tiden.

Timerstyrning av laster utförs inte (inaktiverad) om till- och fråntiderna är nollställda. I princip styrs inte laster av en timer om till- och fråntiderna är lika.

När du går in i klockkorrigeringsmenyn och ställer in den aktuella tiden stannar timern. Därför, när du korrigerar klockfrekvensen, är det nödvändigt att ställa in den aktuella tiden innan du lämnar menyn.

Schema för en tre-kanals termometer, termostat, timer på ATmega8

Enhetskretsen skapades i programmet och skiljer sig i princip inte från kretsen för en tvåkanalstermostat (en tredje lastkontrollkanal lades till och för variation ändrades lastkontrollkretsarna):


Eftersom kretsen använder "utgångs" delar, för bekvämligheten att placera strukturen i ett lämpligt hölje, är kretsen uppdelad i två delar:
— Displayblock — indikatorer och knappar
— Styrenhet — allt annat
Det skulle vara nödvändigt att inkludera lysdioder i displayblocket som signalerar att kanalerna är på, men detta kan göras oberoende när du lägger ut kortet (lägg till tre par kontaktdynor för lysdioderna och anslut dem till trådstyrenheten).

Enhetsdesign

Enhetsbas- ATmega8 mikrokontroller med en klockfrekvens på 8 MHz från en inbyggd oscillator med en intern RC-krets.
För att justera frekvensen för den interna oscillatorn, när du programmerar MK, är det nödvändigt att skriva värdet på kalibreringscellen för en klockfrekvens på 8 MHz i EEPROM-minnet vid adress noll. Standard HEX-filen i EEPROM-minnet nedan innehåller talet $В1 (В1) - medelvärdet för kalibreringscellerna för 5 testade mikrokontroller.
Dessutom, för korrekt drift av realtidstimern, och den fungerar genom avbrott från T1-timern/räknaren när räkneregistret och OCR1A-jämförelseregistret är lika, vid programmering av EEPROM-minnet, efter kalibreringscellens värde , skrivs numret 33050 (1A81), vilket programmeras in i jämförelseregistret OCR1A. När timerns förlopp korrigeras ändras också värdet på detta nummer.

Indikation aktuella temperaturer och värden i installationsläget visas på två tresiffriga sjusegmentsindikatorer med en "gemensam katod" omkopplingskrets.

Sensorer DS18B20är anslutna till enheten via 3-poliga stiftlister DS1 och DS2, vars numrering av stiften motsvarar numreringen av sensorstiften.

Bithantering utförs av lågeffekts bipolära transistorer av NPN-typ.

Går in i menyn, ställer in värden, lanseringen av enkla uppvärmningslägen (kylningslägen) utförs av tre DTS-typ-taktknappar:
— S1 — “Val”
— S2 — » + »
— S3 — » — »


— för temperaturkontrollkanaler — genom optosimistorer MOS3063 och triacs VT139-800E enligt standardkopplingskretsen, som låter dig styra belastningar med en effekt på upp till 3,5 kW (om belastningseffekten är mer än 300-400 W måste triacs installeras på radiatorer)
- för kanalen från timern - genom ett mekaniskt miniatyrrelä med en spolematningsspänning på 5 volt, vilket gör det möjligt, beroende på vilket relä som används, att styra en belastning på upp till 2 - 2,5 kW

Jag uppmärksammar dig på att ansluta nätspänningen på 220 volt till enheten och slå på belastningen - den måste anslutas som i diagrammet, med hänsyn till "fas" och "noll" av nätspänningen.

Enhetens ström utförs från vilken likströmskälla som helst med en spänning på 7-25 volt. Kretsen kan också drivas från en onödig laddare från en mobiltelefon med en utspänning på 5 +-0,5 volt. I det här fallet är det möjligt att utesluta 7805-stabilisatorn och kondensatorerna C4, C5 från kretsen. Den genomsnittliga strömförbrukningen för enheten är 40 milliampere.

Om du behöver organisera reservkraft (för oavbruten drift av timern), kan du till exempel använda följande schema:

Detaljer som används i designen:

Styrning av en trekanals termometer, termostat, termostat, timer

1. Gå in i menyn

Enheten har två menyer.
När du "kort" trycker på "Välj" -knappen, visas inskriptionen "ON—-OFF" på indikatorerna, vi går in i menyn:
— inställning av temperaturgränser för termostatdrift och tidsintervall för termostatdrift, tidsintervall för belastningsreglering med hjälp av en timer
När du trycker länge på knappen "Välj", ersätts inskriptionen "ON—-OFF" av inskriptionen "Cor—-USt" måste du släppa knappen och gå in i menyn:
— korrigering av klockfrekvensen och inställning av aktuell tid

Observera att när du går in i menyn (lång eller kort tryckning på "Välj"-knappen), är alla laddningskontrollkanaler inaktiverade.

2. Meny "Korrigering av framsteg och inställning av aktuell tid" (tryck länge på "Välj"-knappen)

Efter att ha kommit in i menyn befinner vi oss omedelbart i klockkorrigeringsläget:
"Cor—-00"
Genom att trycka på "Välj"-knappen igen växlar vi till läget för att ställa in den aktuella tiden:
"USt—-00.0"
I det aktuella tidsinställningsläget tittar vi på vår mest exakta klocka och använder knapparna "+" och "-" för att ställa in närmaste tid med en noggrannhet på 10 minuter.
Till exempel är den aktuella tiden 20 timmar 37 minuter, ställ in indikatorn på "20.4" (20 timmar 40 minuter) och exakt klockan 20.40, genom att trycka på "Välj"-knappen lämnar vi menyn. Det är allt, realtiden är inställd, klockan startas.
Du kan justera klockfrekvensen från +50 enheter till -50 enheter. Startvärdet är "00" ("00" visas alltid när du går in i detta läge)
När du ändrar inställningen med en, ökar klockfrekvensen (+1) eller minskar (-1) med cirka 4 sekunder per 24 timmar.
Klockans noggrannhet kan kontrolleras på lastkontrollkanalen med hjälp av en timer utan ansluten last genom att tända lysdioden.
Till exempel kl. 21.00 ställer vi in ​​den aktuella tiden, ställer in belastningen att slå på kl. 8.50 och stänger av kl. 9.00. På morgonen mätte vi lastens avstängningstid. Låt oss säga att belastningen stängdes av vid 8 timmar 59 minuter 20 sekunder. Det betyder att timern är 40 sekunder efter på 12 timmar. Om 24 timmar är fördröjningen 80 sekunder. Dividera 80 sekunder med 4 = 20. I korrigeringsläget, ställ in avläsningen till 20, gå sedan till det aktuella tidsinställningsläget, ställ in närmaste aktuella tid, till exempel 9.1, och vid 9 timmar 10 minuter, genom att trycka på "Välj ”-knappen går vi tillbaka till driftläget.

Observera att i avsaknad av en reservströmkälla, i händelse av ett "bortfall" av nätspänningen, nollställs klockan och den aktuella tiden måste ställas in igen.

3. Meny för inställning av temperatur och tidsintervall för termostater

Låt mig påminna dig om driftslägena för termostateringskanalerna (termisk kontroll):
— termostatläge — bibehållande av en viss temperatur
— termiskt reglerläge — hålla temperaturen inom vissa gränser
— läge för enkel uppvärmning (kylning).
Alla dessa lägen beskrivs i detalj i artikeln, som också ger detaljerade instruktioner och funktioner för varje läge.
Med införandet av en realtidstimer i designen blev det möjligt för varje kanal att ställa in ett tidsintervall för kanalen att fungera under dagen. För att göra detta har ytterligare rader för att slå på och av kanaler lagts till i menyn.
Till exempel behöver vi den första temperaturkontrollkanalen för att endast fungera på natten från 23.00 till 6.30. För att göra detta, i den första menyn (tryck kort på "Välj"-knappen):
— efter att ha ställt in de övre och nedre temperaturgränserna, kommer ytterligare två rader att visas: "t.On——00.0" och "t.OF——00.0" (samma kommer att hända för den andra kanalen)
— använd knapparna “+” och “-” för att ställa in: “t.On——23.0” och “t.OF——06.3”
Nu, klockan 23.00 kommer den första kanalen att börja arbeta i det angivna läget, och klockan 6.30 kommer kanalen att stängas av, och så vidare varje dag.
Enkelt värme/kyla läge. Om tidsintervallet inte är valt (på/av-tiden är inställd på "0"), startas dessa lägen manuellt genom att trycka på motsvarande knapp. Detta läge kan också fungera över tid.
Låt oss säga att vi måste värma vattnet i tanken till 45 grader på den andra temperaturkontrollkanalen på morgonen, senast 7.00, med hänsyn till att vattnet i tanken värms upp till denna temperatur på 25 minuter:
— ställ in “2.On——00” och “2.OF——45”
— ställ in "t.On——06.3" och "t.OF" lämna standardvärdet "t.OF——00.0"
Nu startar kanal 2 automatiskt 6.30 minuter och när vattentemperaturen når 45 grader stängs den av.
När du använder läget för enkel uppvärmning/kylning tillsammans med en timer, är det fortfarande möjligt att manuellt starta läget, men det bör beaktas att under tidsperioden "t.OF—-t.On" (för föregående exempel - från 24.00 till 6.30) manuellt läge är inte möjligt . Därför, för att starta läget manuellt när som helst, är det nödvändigt att ställa in "t.OF" 10 minuter mindre än "t.On".

4. Meny för inställning av tidsintervall för timern

Realtidstimer låter dig ställa in två tidsintervall under dagen för att styra belastningen med hjälp av en timer.
För att göra detta har ytterligare fyra rader lagts till i menyn:
— t1.1 — kopplingstid för det första tidsintervallet
— t1.0 — avstängningstid för det första tidsintervallet
— t2.1 — kopplingstid för det andra tidsintervallet
— t2.0 — avstängningstid för det andra tidsintervallet
Tidsintervall får inte överlappa varandra.
Låt oss säga att vi måste tända belysningen på gården två gånger om dagen: från 21.00 till 0.30 och från 5.30 till 7.00
Installera:
— t1.1 — 21.0
— t1.0 — 00.3
— t2.1 — 05.3
— t2.0 — 07.0
Nu kommer timerbelastningen att slås på klockan 21.00 och 5.30 och stängas av klockan 0.30 och 7.00

Andra PCB-alternativet:

Alternativ för att ställa in FUSE-bitar:

(22,2 KiB, 2 016 träffar)

Ibland behöver du bara ställa in ett tidsintervall, utan mycket mikroskopisk precision. Till exempel för matlagning, där felet är några sekunder per halvtimme, spelar timmen ingen viktig roll. Baserat på dessa överväganden valdes en intern RC-oscillator som klockgenerator. Stabiliteten beror på temperatur och förändringar i matningsspänningen, eftersom mikrokontrollern förblir i drift vid en spänning på 1,8-5,5 V. Jag använde ett 3-volts batteri (eller 2 celler på 1,5 V vardera) som strömkälla.

Målet var att förenkla designen så mycket som möjligt med ett minimum av externa delar och kontroll- och displayelement (så enkelt som möjligt). Programmet är skrivet i assembler i AVR Studio.

Det finns ett par knappar för att styra timerlägen. Den första "SET" är för att ställa in tidsintervallet, den andra "RESET" är för att återställa när som helst om du behöver "spela om" situationen och ställa in ett annat tidsintervall. Och även en hörbar summer, som en hörbar indikation på timerns tillstånd vid olika driftsperioder.

Timern är gjord med ett diskret intervall på minst 5 minuter du kan ringa så många sådana intervall som du vill (upp till 255) om du håller knappen intryckt.

Schematiskt diagram av en kökstimer:

Efter att ha släppt knappen startar timern och räknar ner Timern har en ljudindikation (ögon och händer deltar inte i kontrollen, bara hörseln), när den är installerad "pipar" den så många gånger som du behöver för att slå 5 minuter. intervaller. Till exempel: du behöver ett intervall på 30 minuter, vilket innebär att du måste trycka på "SET"-knappen och hålla den nedtryckt, slå "pip" 6 gånger och släppa knappen. Från det ögonblick som "SET"-knappen släpps, tänds LED-indikatorn, vilket indikerar att timern har startat och slocknar först i slutet av hela cykeln, även från det ögonblick den startar, börjar nedräkningen, summern " pip" efter nästa diskreta 5-minutersintervall så många gånger hur många av dem som återstår innan hela timercykeln slutar. Och när hela cykeln är klar hörs i slutet av cykeln en lång "pipande"-signal i cirka 10 sekunder, vilket signalerar slutet.

Efter detta går timern i standbyläge genom att växla till viloläge till det energisparande Power down-läget där strömförbrukningen är mindre än en mikroampere. Programmet använder en intern RC-generator vars klockfrekvens är vald på 128 / 8 kHz. .

Detta är en timerkrets på en PIC16F628A mikrokontroller, lånad från en bra portugisisk sida om radioelektronik. Mikrokontrollern klockas från en intern oscillator, vilket kan anses vara ganska exakt för detta ögonblick, eftersom stift 15 och 16 förblir fria, kan du använda en extern kvartsresonator för ännu större noggrannhet i drift.


Timern har tre knappar för att styra enheten: "START/STOPP", "MIN" och "SEC"

"START/STOPP"- för att starta och pausa timern.
"MIN"- för att ställa in tidsintervallet i minuter. Kan ställas in från 0 till 99.
SEC- samma, men för att ställa in sekunder. Den andra kan också ställas in från 0 till 59.
Genom att trycka på knapparna "MIN" och "SEC" samtidigt återställs timerkretsen under drift.

När den inställda tiden på timern är förbrukad hörs ett pip och lysdioden tänds. En summer av elektromagnetisk typ används som ljudsändare. Efter detta, när du trycker på knappen, återställs timern och lysdioden slocknar.

Medan timern räknar ner är stift 13 hög, och när timern slutför sin nedräkning kommer den logiska nivån att vara låg. Denna utgång kan användas för att styra vilket ställdon som helst. Kretsen drivs av en stabiliserad strömkälla.


Bygel J1 används för att kalibrera timern. När den är stängd går den in i programmeringsläge. Med knapparna "MIN" och "SEC" kan du ändra värdet på den interna parametern som saktar ner eller snabbar upp timern. Detta värde lagras i mikrokontrollerns EEPROM. Om du trycker på "START/STOPP"-knappen i programmeringsläge kommer denna parameter att återställas till standardinställningarna.

Enkel timer på pic16f630

Timern kan ställas in på ett tidsintervall från en minut till 21 timmar i diskreta steg per minut. Konstruktionen har 12 manöverbrytare, som var och en har sin egen hålltid. Eftersom mikrokontrollern arbetar från sin egen generator är tidsräknefelet ganska litet, inte mer än 30 sekunder per timme.

När MK-firmware blinkar måste Jp1 inaktiveras. Om du inte planerar att ändra tidsinställningarna ofta kan du använda byglar istället för switchar. Den fasta programvaran, källan och projektet i Proteus kan laddas ner från länken ovan

Ett enkelt diagram över en bra timer på atmega8 MK, enkel navigering i menyn, LCD-display med flytande kristaller, realtidsklocka, minimalt antal delar.

En mycket användbar sak, till exempel för ett växthus, du kan organisera vattning eller cirkulation i hydroponics, du kan ställa in matare och drickskålar för djur, fåglar och mycket mer.


Hjärtat i denna timer är den mycket populära och inte längre dyra Atmega8 mikrokontrollern.

Naturligtvis kommer vi att behöva en programmerare för firmware, men om vi inte har en kan vi klara oss med bara 4 ledningar anslutna till LPT-porten enligt detta schema.

Vad vi behöver:

Timerkrets

Som du kan se finns det ingen strömkrets och ställdon på den, detta beror på att du kan välja att använda en extern stabiliserad strömförsörjning, och du vet inte heller vilken belastning du planerar att ansluta, så alla måste välja ställdonet själva för att passa deras tekniska krav.

Som ett alternativ för ett ställdon som använder triacs, tyristorer och triacs, visas de nedan.



Alternativ från programmet Sprint Layout.

Särskild uppmärksamhet bör ägnas vid installation av klockchipet och kvartselementet. Längden på spåren mellan dem bör vara minimal, men det är bättre att använda mikrokvarts från ett armbandsur och löda det direkt på klockans MC-ben. Vi fyller allt ledigt utrymme bredvid klockan med koppar till väskan. Batteriet behövs för att hålla klockan igång när den är urkopplad. Om du av någon anledning inte installerade det här batteriet, anslut sedan den positiva ledningen till höljet, annars kommer klockan helt enkelt inte att fungera.

Mikrokontrollern flashas med en programmerare eller med enkla 5 trådar.

Författaren av firmware (nedladdning - multitimer) försökte och ändrade inte säkringarna, vilket gör det mycket enkelt, utan problem, att installera firmware för en nybörjare radioamatör. Om MK ännu inte har använts är den ny från butiken, ladda bara upp firmware och det är det, men om det redan finns ändringar i säkringarna måste du ställa in dem som CKSEL=0001. Allt annat är enkelt och behöver ingen förklaring.

Det är mycket bekvämt att använda kopplingslådor i plast för väskan, de finns i olika storlekar och former.

Med hjälp av varmt lim från en pistol fixerar vi LCD-skärmen i locket skär med en kniv, skär hål för kontrollknapparna och strömknappen.

Vi placerar alla komponenter inuti fodralet, kontrollerar hela tiden hur locket stänger, och vid behov flyttar eller böjer vi alla som är i vägen.

Vi levererar ström till den monterade kretsen, följande bild bör visas.

Styrningen sker med fyra knappar. Menyn består av tre punkter, CLOSK - ställa klockan, RESET - återställa alla installerade timer, TIMER - ställa in timers.

Gå först (*) till klockmenyn och ställ in (>)(<)(#) точное время.


En ledtråd om kontrollknapparna finns på den nedre raden av displayen varje meny är olika, så det finns ingen anledning att beskriva knapparna.

Nu är allt klart för att korrekt ställa in de tillfälliga positionerna för timern efter att ha tryckt på pundet, skrivs programmet till MK:s permanenta minne.

Fortsätter ämnet:
Hus gjorda av timmer

Filipok, Leo Tolstojs berättelse är ett av verken i skolans läroplan varje barn som studerar i 1:a, 2:a eller högst 3:e klass bör läsa den på ett eller annat sätt. I denna...