Hur MCU driver LCD-skärm och designöverväganden
Klassificering och tillämpning av en chip mikrodator
Beroende på sin minnestyp kan MCU delas upp i två typer utan on-chip ROM och med on-chip ROM. För chips utan on-chip ROM måste de anslutas till ett externt EPROM (vanligtvis 8031); chips med on-chip ROM är vidare uppdelade i on-chip EPROM (typiskt 87C51), MASK on-chip mask ROM (typiskt 87C51) Chip är 8051), on-chip Flash-typ (typiskt chip är 89C51) och andra typer.
Enligt syftet kan den delas in i allmänt och särskilt ändamål; beroende på bredden på databussen och längden på databytes som kan bearbetas på en gång, kan den delas upp i 8, 16 och 32-bitars MCU.
För närvarande är den inhemska MCU-applikationsmarknaden den mest använda inom konsumentelektronik, följt av industriområdet och fordonselektronikmarknaden. Konsumentelektronik inkluderar bland annat hushållsapparater, tv-apparater, spelkonsoler och ljud- och videosystem. Industriella områden inkluderar smarta hem, automation, medicinska tillämpningar och ny energigenerering och distribution. Fordonsområdet inkluderar drivlina och säkerhetskontrollsystem för fordon etc.
Shenzhen Hongjia Technology Co., Ltd. specialiserar sig på FoU, produktion och försäljning av 1,14-tums-10,1-tums LCD-skärmar och pekskärmar, som kan anpassas och tillhandahåller stödjande MCU-skärmar, inklusive SPI-gränssnitt, MCU-gränssnitt, RGB-gränssnitt, MIPI-gränssnitt, etc. Det finns många storlekar och modeller, matchande resistiv pekskärm och kapacitiv pekskärm kan också tillhandahållas.
Den grundläggande funktionen hos en mikrodator med ett chip
För de flesta MCU:er är följande funktioner de vanligaste och mest grundläggande. För olika MCU:er kan beskrivningen vara annorlunda, men de är i grund och botten desamma:
1. TIMER (timer): Även om det finns många typer av TIMER, kan de klassificeras i två kategorier: den ena är TIMER med fast tidsintervall, det vill säga tidtagningen ställs in av systemet och användarprogrammet kan inte kontrolleras. Endast flera fasta tidsintervall tillhandahålls för användarprogram att välja, såsom 32Hz, 16Hz, 8Hz, etc. Denna typ av TIMER är vanligare i 4-bitars MCU:er, så den kan användas för att implementera relaterade funktioner som klocka och timing .
Den andra typen är programmerbar timer (programmerbar timer). Som namnet antyder kan tidpunkten för denna typ av timer styras av användarens program. Styrmetoderna inkluderar: val av klockkälla, val av frekvensdelning (Prescale) och prefabricerad nummerinställning, etc. Vissa MCU:er har alla tre samtidigt, medan andra kan ha en eller två av dem. Denna typ av Timer-applikation är mycket flexibel, och den faktiska användningen är också ständigt föränderlig. En av de vanligaste applikationerna är att använda den för att realisera PWM-utgång.
Eftersom klockkällan kan väljas fritt, kombineras sådana timers i allmänhet med händelseräknare.
2. IO-portar: Varje MCU har ett visst antal IO-portar. Utan IO-portar kommer MCU:n att förlora kommunikationskanalen med omvärlden. Beroende på konfigurationen av IO-porten kan den delas in i följande typer:
Ren ingång eller ren utgångsport: Denna typ av IO-port bestäms av MCU:ns hårdvarudesign. Det kan bara matas in eller ut och kan inte ställas in av programvara i realtid.
Läs och skriv IO-portar direkt: Till exempel hör IO-portarna på MCS-51 till denna typ av IO-portar. När instruktionen för läs IO-port körs är det en ingångsport; när en skriv-IO-portinstruktion körs är det automatiskt en utgångsport.
Programprogrammering för att ställa in in- och utgångsriktningen: ingången eller utgången för denna typ av IO-port ställs in av programmet enligt de faktiska behoven, applikationen är relativt flexibel och vissa applikationer på bussnivå kan realiseras, såsom I2C buss, olika LCD-skärmar, LED Drivers kontrollbuss, etc.
För användning av IO-porten måste den viktiga punkten komma ihåg: för ingångsporten måste det finnas en tydlig nivåsignal för att säkerställa att den inte kan flyta (det kan uppnås genom att lägga till en pull-up eller pull- nedresistor); för utgångsporten, dess utgång. Tillståndsnivån måste beakta dess externa anslutning, och det bör säkerställas att det inte finns någon strömkälla eller sänka i standby- eller statiskt tillstånd.
3. Externt avbrott: Externt avbrott är också en grundläggande funktion för de flesta MCU:er. Den används vanligtvis för realtidsutlösning av signaler, datasampling och statusdetektering. Det finns flera typer av avbrott: stigande kant, fallande kant trigger och nivå trigger. Externa avbrott implementeras vanligtvis via ingångsportar. Om det är en IO-port kommer avbrottsfunktionen endast att aktiveras när den är inställd på ingång; om det är en utgångsport kommer den externa avbrottsfunktionen att stängas av automatiskt (det finns några undantag i ATiny-serien av ATMEL, utgångsporten kan också utlösa avbrottsfunktionen). Tillämpningen av externt avbrott är som följer:
Detektering av externa triggersignaler: den ena är baserad på realtidskrav, såsom styrning av kiselstyrda likriktare, detektering av burstsignaler etc., och den andra är behovet av energibesparing.
Mätning av signalfrekvens: För att säkerställa att signalen inte missas är ett externt avbrott det idealiska valet.
Dataavkodning: Inom området för fjärrkontrollapplikationer, för att minska designkostnaden, är det ofta nödvändigt att använda programvara för att avkoda olika kodade data, såsom avkodning av Manchester och PWM-kodning.
Nyckeldetektering och systemväckning: För en MCU som går in i viloläge måste den i allmänhet väckas genom ett externt avbrott. Den mest grundläggande formen är en nyckel, och nivåändringen genereras av nyckelns verkan.
4. Kommunikationsgränssnitt: Kommunikationsgränssnittet som tillhandahålls av MCU inkluderar vanligtvis SPI-gränssnitt, UART, I2C-gränssnitt, etc., som beskrivs enligt följande:
SPI-gränssnitt: Denna typ av gränssnitt är den mest grundläggande kommunikationsmetoden som tillhandahålls av de flesta MCU:er. Dess dataöverföring styrs av en synkron klocka. Signalerna inkluderar: SDI (seriell dataingång), SDO (seriell datautgång), SCLK (seriell klocka) och Ready-signal; i vissa fall kan det inte finnas någon redo-signal; den här typen av gränssnitt kan fungera i Master-läge eller Slave-läge, det populära talesättet är att se vem som tillhandahåller klocksignalen, parten som tillhandahåller klockan är Master, och den motsatta parten. Sedan är det Slaver.
UART (Universal Asynchronous Receive Transmit): Det är det mest grundläggande asynkrona överföringsgränssnittet. Dess signallinjer är endast Rx och Tx. Det grundläggande dataformatet är: Startbit + Databit(7-bitar/8-bitar) + Paritetsbit(jämn, udda eller ingen) + stoppbit(1~2bitar). Den tid som en bit data tar kallas Baud Rate (baudhastighet).
För de flesta MCU:er kan längden på databitar, datakontrollmetod (udda kontroll, jämn kontroll eller ingen kontroll), längden på stoppbiten (stoppbit) och baudhastighet ställas in flexibelt genom programmering. Säkert. Det vanligaste sättet för denna typ av gränssnitt är att kommunicera med PC:ns seriella port.
I2C-gränssnitt: I2C är ett dataöverföringsprotokoll utvecklat av Philips, som också implementeras av två signaler: SDAT (seriell dataingång och -utgång) och SCLK (seriell klocka). Dess största fördel är att flera enheter kan anslutas till denna buss, som kan identifieras och nås via adresser; en av de största fördelarna med I2C-bussen är att det är väldigt bekvämt att använda mjukvara för att realisera den genom IO-porten, och dess överföringsdatahastighet styrs helt av SCLK. För att kontrollera kan den vara snabb eller långsam, till skillnad från UART-gränssnittet , som har stränga hastighetskrav.
5. Watchdog (watchdog-timer): Watchdog är också en grundläggande konfiguration av de flesta MCU:er (vissa 4-bitars MCU:er kanske inte har denna funktion), och de flesta MCU Watchdogs kan bara tillåta program att återställa dem och kan inte återställa dem. Den är stängd (vissa är inställda när programmet bränns in, som till exempel Microchip PIC-serien MCU), och vissa MCU:er avgör om den ska öppnas på ett specifikt sätt, som Samsungs KS57-serie, så länge som programmet kommer åt Watchdog-registret , slås på automatiskt och kan inte stängas av igen. Generellt sett kan återställningstiden för watchdog ställas in per program. Den mest grundläggande tillämpningen av Watchdog är att tillhandahålla en självåterställningskapacitet för MCU:n att krascha på grund av oväntade fel.
Mikrokontroller programmering
Det är stor skillnad mellan programmering av MCU-program och programmering av PC-program. Även om C-baserade MCU-utvecklingsverktyg blir mer och mer populära, för en effektiv programkod och en designer som gillar att använda assembler, är assemblerspråk Fortfarande det mest koncisa och effektiva programmeringsspråket.
För MCU-programmering kan dess grundläggande ramverk sägas vara ungefär detsamma, generellt uppdelad i tre delar: initialiseringsdel (detta är den största skillnaden mellan MCU-programmering och PC-programmering), huvudprogramslinga och avbrottsbehandlingsprogram, som är resp. förklaras enligt följande:
1. Initiering: För utformningen av alla MCU-program är initiering det mest grundläggande och viktigaste steget, i allmänhet inkluderar följande:
Maskera alla avbrott och initiera stackpekaren: Initieringsdelen vill i allmänhet inte att några avbrott ska inträffa.
Rensa RAM-området i systemet och visa Minne: Även om det ibland kanske inte är helt nödvändigt, ur tillförlitlighet och konsekvens, särskilt för att förhindra oavsiktliga fel, rekommenderas det att utveckla goda programmeringsvanor.
Initiering av IO-port: Enligt projektets applikationskrav, ställ in ingångs- och utgångsläge för den relevanta IO-porten. För ingångsporten måste du ställa in dess pull-up eller pull-down motstånd; för utgångsporten måste du ställa in dess initiala nivåutgång för att förhindra onödiga fel.
Avbrottsinställningar: För alla avbrottskällor som behöver användas i projektet bör de vara aktiverade och triggervillkoren för avbrott ställas in, medan för redundanta avbrott som inte används måste de stängas av.
Initiering av andra funktionsmoduler: För alla perifera funktionsmoduler i MCU:n som behöver användas, måste motsvarande inställningar göras enligt applikationskraven för projektet, såsom UART-kommunikation, Baud-hastighet, datalängd, verifieringsmetod och Stop Bit måste ställas in Längden etc., och för programmeringstimern måste du ställa in dess klockkälla, frekvensdelning och ladda om data osv.
Parameterinitiering: Efter att ha slutfört initieringen av MCU-hårdvara och resurser är nästa steg att initiera vissa variabler och data som används i programmet. Initieringen av denna del måste utformas i enlighet med det specifika projektet och det övergripande arrangemanget av programmet. För vissa applikationer som använder EEPROM för att spara projektprefabricerade data, rekommenderas det att kopiera relevant data till RAM-minnet på MCU under initiering för att förbättra programmets åtkomsthastighet till data och minska systemets strömförbrukning (i princip , kommer åtkomst till det externa EEPROM att öka strömförbrukningen för strömförsörjningen).
2. Huvudprogrammets loopkropp: De flesta MCU:er körs kontinuerligt under lång tid, så huvudprogramkroppen är i grunden utformad på ett cykliskt sätt. För applikationer med flera arbetslägen kan det finnas flera. En loopkropp konverteras mellan varandra genom tillståndsflaggan. För huvudprogramkroppen är följande moduler i allmänhet arrangerade:
Beräkningsprogram: Beräkningsprogrammet är i allmänhet tidskrävande, så det är bestämt emot all avbrottsbehandling, särskilt multiplikation och division.
Bearbeta program med låga realtidskrav eller inga realtidskrav;
Displayöverföringsprogram: huvudsakligen för applikationer med extern LED och LCD-drivrutin.
3. Avbrottsbehandlingsprogram: Avbrottsprogrammet används huvudsakligen för att bearbeta uppgifter och händelser med höga realtidskrav, såsom detektering av externa plötsliga signaler, detektering och bearbetning av nycklar, timingräkning, LED-displayskanning, etc.
I allmänhet bör avbrottsprogrammet hålla koden så koncis och kort som möjligt. För funktioner som inte behöver bearbetas i realtid kan du ställa in triggerflaggan i avbrottet, och sedan kommer huvudprogrammet att exekvera den specifika transaktionen — detta är mycket viktigt. Speciellt för MCU:er med låg effekt och låg hastighet är det nödvändigt att säkerställa snabb respons på alla avbrott.
4. För arrangemanget av olika uppgiftsorgan har olika MCU:er olika bearbetningsmetoder:
Till exempel, för låghastighets- och lågeffekt MCU (Fosc=32768Hz) applikationer, med tanke på att sådana projekt alla är handhållna enheter och använder vanliga LCD-skärmar, kräver svaret på knappar och skärmar hög realtidsprestanda, så vanligtvis tidsstyrda avbrott används för att bearbeta knappåtgärder och datavisning; och för höghastighets-MCU:er, såsom Fosc>1MHz-applikationer, eftersom MCU:n har tillräckligt med tid för att exekvera huvudprogrammets loopkropp vid denna tidpunkt, kan den endast avbrytas i motsvarande Sätt olika triggerflaggor i , och lägg alla uppgifter i huvudprogrammet för att köra.
5. I programmeringsdesignen för MCU är ytterligare en punkt som behöver särskild uppmärksamhet:
För att förhindra samtidig åtkomst eller inställning av samma variabel eller data i avbrottet och programmets huvuddel. En effektiv förebyggande metod är att arrangera behandlingen av sådana data i en modul och bestämma huruvida den relevanta operationen av datan ska utföras genom att bedöma triggerflaggan; medan i andra programkroppar (främst avbrott), data som behöver bearbetas. Bearbetningsplatsen ställer bara in den utlösta flaggan. – Detta säkerställer att utförandet av datan är förutsägbart och unikt.
Utvecklingsfärdigheter för mikrokontroller
1. Hur man minskar buggar i programmet
För att minska programbuggar bör du först överväga följande parametrar för hantering av överintervall som bör beaktas när systemet används.
Fysiska parametrar: Dessa parametrar är huvudsakligen ingångsparametrarna för systemet, inklusive excitationsparametrar, driftsparametrar under insamling och bearbetning, och resultatparametrar i slutet av bearbetningen.
Resursparametrar: Dessa parametrar är huvudsakligen resurserna för kretsar, enheter och funktionella enheter i systemet, såsom minneskapacitet, lagringsenhetslängd och staplingsdjup.
Tillämpningsparametrar: Dessa applikationsparametrar representerar ofta applikationsförhållandena för vissa mikrodatorer och funktionella enheter med ett chip. Processparametrar: Avser de parametrar som ändras på ett ordnat sätt under driften av systemet.
2. Hur man förbättrar effektiviteten hos C-språkprogrammeringskod
Det är en oundviklig trend i utvecklingen och tillämpningen av mikrodatorer med ett chip att använda C-språket för att designa mikrodatorprogrammet med ett chip. Om du vill uppnå högsta effektivitet när du programmerar i C är det bäst att vara bekant med C-kompilatorn du använder. Testa först antalet påståenderader i assemblerspråk som motsvarar varje kompilerat C-språk, så att du tydligt kan veta effektiviteten. När du programmerar i framtiden, använd satsen med högsta kompileringseffektivitet. Varje C-kompilator kommer att ha vissa skillnader, så kompileringseffektiviteten kommer också att vara annorlunda. Kodlängden och exekveringstiden för en utmärkt inbäddad system C-kompilator är bara 5-20 % längre än samma funktionsnivå skriven i assemblerspråk.
För komplexa projekt med snäv utvecklingstid kan C-språk användas, men förutsättningen är att du är mycket förtrogen med C-språket och C-kompilatorn för MCU-systemet, och ägnar särskild uppmärksamhet åt de datatyper och algoritmer som C-kompilatorsystemet kan stödja. Även om C-språket är det vanligaste språket på hög nivå, är C-språkets kompileringssystem för olika MCU-tillverkare olika, särskilt när det gäller driften av vissa speciella funktionsmoduler. Så om du inte förstår dessa funktioner kommer det att finnas många problem vid felsökning, vilket kommer att leda till lägre exekveringseffektivitet än assemblerspråk.
3. Hur man löser anti-interferensproblemet med enchips mikrodator Det mest effektiva sättet att förhindra störningar är att ta bort interferenskällan och skära av störningsvägen, men det är ofta svårt att göra det, så det beror bara på om anti-interferensförmågan hos mikrodatorn med ett chip är tillräckligt stark. Samtidigt som hårdvarusystemets anti-jamming-förmåga förbättras, kännetecknas programvarans anti-jamming av sin flexibla design,