Posts Tagged ‘Elektronik’

Matematik

mars 24, 2012

Jag läser för närvarande MITx 6.002x Circuits and Electronics, och chockades ganska tidigt över hur mycket mina matematikkunskaper har tynat bort. Redan första labben insåg jag att lösningen borde kunna plockas fram med hjälp av ett enkelt ekvationssystem med två okända och två ekvationer. En enkel ekvation och en besvärligare ekvation, den enkla ekvationen besegrades snabbt men den besvärligare stretade emot och jag fick fundera över vilka regler som gäller var och varannan rad. Igår efter eftermiddagsfikat, med en hjärna laddad med koffein och socker, kunde jag dock besegra ekvationen och lösa ut mina två okända och få dessa att överensstämma med de värden jag experimentellt fastställt tidigare.

Lösningen!

Lösningen! (jag är relativt säker)

Kursen i övrigt är än så länge relativt grundläggande men det känns bra med repetitionen. Hitintills har vi gått igenom Kirchofs lagar, Norton och Thevenin samt grundläggande digitala kretsar. Labbarna består av en webbaserad elektronikanalys-verktygslåda som fungerar väldigt bra, övriga kurselement bygger på den amerikanska modellen med en mid-term och sedan en slut-tenta plus läxor och labbar som alla är betygsgrundande. Så länge fritiden räcker till borde kursen gå galant eftersom jag borde kunna allt som lärs ut redan, men man vet aldrig…

Annonser

AVR

februari 18, 2010

Jag har startat upp ett par elektronikprojekt jag haft i startgroparna ett tag nu. Jag kommer basera dessa projekt kring Atmels AVR-mikrokontrollers* och det första steget har varit att sätta upp och testa utvecklingsmiljön, verktygskedjan samt att programmering av kretsarna fungerar. Verktygskedjan är jag rätt bekant med sedan tidigare experiment. (Jag dokumenterade till och med installationsproceduren på elektronikforumets wiki ifall någon är intresserad)

Testuppkoppling för "hello LED"

Testuppkoppling för "hello LED"

Mitt första testprojekt var det klassiska Hello LED** (motsvarigheten till Hello World för mikrokontrollers) som enligt konvention blinkar med en lysdiod. Mitt program har gått igenom följande steg:

  1. Enkel blinkfunktion med fördröjningsloopar
  2. Avbrottsbaserade fördröjningar mha Watchdog-timern***
  3. Punkt två + Power down-mode för att göra det hela strömsnålt

Det första problemet var att koppla in min programmerare och få över programmet till kretsen. Efter att ha dubbelkollat alla kopplingar och hittat/rättat till ett par dumheter fungerar det fortfarande inte att programmera chipet. Lyckligtvis kom Google till undsättning, i ett forum någonstans fiskas viktig information fram:

Saknas matningsspänning kan programmering misslyckas lite beroende på utrustning och lite beroende på månens gravitationsinverkan eller andra slumpmässiga effekter.

Lite ström och det går som en dans! Punkt 1 (ovan) påbörjades raskt och efter lite problem med att dioden blinkade 1000 ggr/s (4 * 10^6/1000 är inte ungefär 0.1… ibland undrar man…)

Efter detta begav jag mig genast vidare mot nya djärva mål, dvs punkt 2 och 3. När jag funderat, läst, tänkt, skrivit, skrivit om, funderat, skjutit upp, och sedan läst och skrivit mig ner till punkt tre hade jag följande kod:


#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>

uint8_t toggle = 0;
uint8_t cnt = 0;

ISR(WDT_vect)
{
  if(cnt > 90)
  {
    if(toggle)
    {
      PORTB &= 0xfe;  //LED On

      toggle = 0;
      cnt = 83;
    }
    else
    {
      PORTB |= 0x01;  //LED Off

      toggle = 1;
      cnt = 40;
    }
  }
  else
    cnt++;
}

int main(void)
{
  //Interrupts
  WDTCR = 0x40; //Watch Dog Interrupt 2k Cycles

  //IO
  DDRB  = 0x01; //PB0 => Output

  PORTB = 0x01;
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);  //MCUCR SM0-1 => 10 (power down)

  //Enable global interrupts
  sei();        

  while(1)
  {
    sleep_mode(); //MCUCR SE => 1 and asm sleep-command
  }

  return 0;
}

syntax highlighted by Code2HTML, v. 0.9.1

Denna övning lämnade mig en aning imponerad över de bibliotek som finns tillgängliga tillsammans med avr-gcc, de verkar göra kod ganska lätt att porta mellan olika AVRer. Jag känner mig också optimistisk inför mina framtida projekt, det jag gjort hitintills är en bra grund för minst ett av mina planerade projekt.

* Mikrokontroller är inget riktigt ord utan en försvenskning av det engelska ordet microcontroller. På svenska heter det egentligen Mikrodator men det låter inte lika bra.

** LED är en förkortning av Light Emitting Diod och kallas ofta för Lysdiod på svenska

*** Watchdog-timern är i sin originalform en räknare som startar om mikrokontrollern när den räknat upp till sitt max-värde. Detta brukar användas för att starta om en hängd processor, medan koden gör det den ska nollställer man Watchdog-timern regelbundet och när något går fel så denna nollställning inte utförs startar mikrokontrollern om. I den mikrokontroller jag använder kan den istället för att starta om generera ett periodiskt avbrott.

MOS Technology 6581

september 23, 2009

Jag har i dagarna fått hem ett stycke MOS 6581-chip, mer känt som SID-chipet.

Mitt SID-chip, siffrorna 2783 är datumkoden som berättar att den här kretsen producerades vecka 27 1983.

Mitt SID-chip, siffrorna 2783 är datumkoden som berättar att den här kretsen producerades vecka 27 1983.

SID står för Sound Interface Device och är ett digitalt/analogt Synthisizer-chip och är ganska känt i Commodore 64-sammanhang pga dess smått unika ljud. SID-chipet har tre kanaler (röster), hanterar fyra typer av vågformer (Sågtand, trekant, fyrkant och brus) programmerbara filter (band/hög/låg-pass), en ringmodulator per kanal och en del smått och gott som jag insett att jag inte är tillräckligt insatt för att förstå.

Min plan är att koppla upp referensuppkopplingen från chipets datablad och ersätta 650x-MCUn med en ATMega-krets från Atmel (som med lite tur kan programmeras så att den externa minnesbussen passar SID-chippet) och sedan se ifall jag kan få något ljud.

Referensschema från Databladet

Referensschema från Databladet

Det är tur att det finns arkiv för gamla datablad så man kan få reda på den här typen av information och så att gammal teknik överlever.

Jag ser verkligen fram emot att få experimentera och lära mig lite om sådant här, men jag blir nog lite ledsen ifall jag bränner chipet. Jag är inte säker på vad det blir av det hela, det vore kul att försöka bygga en Synth men det är ett ganska stort projekt och min kunskap om hur en Synth fungerar är extremt begränsad.

Logiska kretsar

juni 15, 2008

För ett par måndagar sedan (på Helsingborgs Linux User Groups pubkväll) försökte jag mig på att förklara hur en logisk krets eller ”grind” fungerar egentligen. Jag känner att jag inte lyckades helt bra eftersom jag inte kände mig själv 100 % säker i ämnet. Jag har gjort det enda raka (jag har ju läst en del elektronik och bör ju kunna förklara åtminstone det grundläggande) och tänkte försöka presentera en hyggligt sammanhängande redovisning av hur det hela fungerar. Känner jag mig själv rätt kommer jag misslyckas med sammanhängandet.

En logisk krets är en krets som kan utföra enkla logiska operationen och svara sant eller falskt, typiska logikkretsar är och (and), eller (or) och inte (not). And-kretsen tar i dess enklaste form två in-signaler som kan anta nivåerna sant och falskt, utsignalen antar värdet sant ifall dess båda in-signaler är sanna (”In1 = sann” och ”In2 = sann” ger ”Ut = sann”). Dessa kan sedan kopplas ihop i kedjor, staplar och krumelurer för att bilda mer komplexa logiska strukturer som till exempel en digitalklocka (vår tids största statussymbol).

I elektriska kretsar representeras värdena sant och falskt rent elektriskt av spänning och brist på spänning, ett sant värde har en spänning över x Volt och ett falskt värde har en spänning under x Volt*.

Transistorer är smått magiska ting. De är magiska för att de är fantastiskt användningsbara och fruktansvärt smart konstruerade. En transistor är en halvledare med tre sidor, bas, kollektor och emitter och kan leda från kollektorn till emittern endast ifall det ligger en signal på basen, vilket innebär att de kan fungera som en brytare.

Med hjälp av transistorn kan en enkel logisk krets kopplas upp enligt figuren nedan.

En förenklad representation av en and-grind

I bilden ovan** krävs det att både A och B skall ha en signal (sann nivå) för att de båda transistorerna skall öppnas och ge en sann ut-signal. Ifall någon av de båda transistorerna är stängda kommer spänningen på utgången dras ned*** till 0 V (falskt).

I moderna kretsar används mer avancerade konstruktioner, men principen stämmer. Engelska Wikipedia har har en del bra artiklar i ämnet, till exempel deras artikel på CMOS-kretsar och TTL-kretsar (TTL = transistor-transistor-logic).

* Detta är inte riktigt sant i de flesta fall har en hysteres lagts in så att spänningen måste exempelvis stiga över 4 Volt för att anta värdet sant och sedan för att återgå till värdet falskt måste spänningen falla under 1 Volt

** Bilden är något förenklad eftersom den transistor som används (en BJT-transistor av typen NPN) kräver en ström på basen för att öppna och inte en spänning.

*** Dras ned innebär att när resultatet skall vara falskt kommer resistansen genom transistorerna vara oändlig (eller jättestor i alla fall) och den spänning som ligger vid utgången kommer då vara oändligt (eller jätte) nära jordnivån 0 V. Ifall resistansen inte fanns där skulle utsignalen inte kunna anta något annat värde än 0 V eftersom utgången då skulle vara kopplad till jorden och det enda som skulle ske när transistorerna öppnar är att minst en av transistorerna skulle säga *Poff* och ryka lite oroväckande.