Jeg hadde litt lyst til å teste litt utviklingsmiljø på MacOSX – Mikrokontroller. Jeg har tidligere gjort et prosjekt på PC der jeg laget en «Vekk-meg» alarm med styring av lys og melodi på morgenen. Det er en stund siden nå, og utviklingsverktøyet for programmering av dette var Atmel Studio 5.0

På Mac har det ikke vert like godt integrert mulighet, selv om dette nå begynner å bedre seg. Generellt programmering på MacOSX har vært minst like gode som under Windows. Produkter for Microcontroller programmering har vært i PC verdenen, men det er moro å se at ting kommer etter her også.

Jeg rotet litt i skuffen her og fant 3 basis komponenter samt et koplingsbrett. En ATMEGA164P Mikrokontroller, et LCD display, og en DS18030 digitalt potensiometer. Utfordringen her var å få mikrokontrolleren til å snakke med disse komponentene, samt å lese av analoge spenninger på med ADC konverter.

Kretsen som jeg laget på koplingsbrettet ser slik ut:

Skjermbilde 2014-05-24 kl. 21.29.51

 

Mer praktisk ble dette slik:

Eksperiment

Programmet som brukes for programmering er gode kjente Xcode – med AVRDUDE som program for å laste opp programmet i mikrokontrolleren, via en JTAGICE MKII enhet. Denne enheten plugges i USB porten på maskina, og har en flatkabel med en plugg som må settes inn i designet. Det er hovedsaklig 4 Data-linjer fra denne pluggen som benyttes for programmeringen, + strøm og tilgang til Reset pinnen på kontrolleren.

Første utfordring: Mikrokontroller – LCD Display.

Det finnes en del dokumentasjon på nettet for disse komponentene. AVR Cross-Pack for MacOSX inneholder AVRDUDE  + et program som lager «Start prosjkektet» – samt installerer kompiltatorer og ting for kryss-utvikling på MacOSX der programmet skal kjøre i microcontrolleren.

Å lage start-prosjektet var ganske enkelt. Jeg så om det var noe ferdige programbiblioteker for LCD display – og der fant jeg et bibliotek som synes ganske greit. Jeg fikk ikke dette til å virke med en gang, men jeg fant ut to ting. Det første var at jeg hadde koplet feil – Displayet har 8 data-linjer, men kan også kjøre i 4-linjers modus for å spare porter på kontrolleren. Jeg antok da at det var D0- til D3 som var de 4, men nei – det var de øvre fire bitene som skulle benyttes. Videre så jeg i dokumentasjonen for displayet at det var noe avvikende timing mellom 5V modellen og 3V modellen så det måtte rettes opp i biblioteks-koden.

Neste utfordring var å lese av ADC på kontrolleren.

Atmel har laget et relativt komplekst system her for programmering av dette, – da denne ADC er relativt avansert og fleksibel. Det er et antall registere som skal initieres med korrekte verdier for korrekt funksjon. Jeg satte først opp en spenningsdeler der jeg hadde en fast spenning på inngangen, og fikk dette etterhvert til å fungere.

Neste utfordring er kommunikasjon med digitalt potensiometer.

Dette bruker noe som heter i2c buss. Det er en 2-linjers buss som kan gå mellom mange forskjellige enheter og utveksle data på serie-form. Kontrolleren har ferdig funksjonalitet for dette som forenkler det hele ganske mye. Igjen er det et antall registere som må initieres for korrekt verdi, og så til dokumentasjonen for potensiometere for å finne hvilke kommandoer dette aksepterer for å sette potensiometer verdi. Potensiometeret har 256 instillinger (1 byte) fra 0-til max. Ved å kople hver av ytterpunktene til pluss- og minus strømforsyningen (som i denne kretsen er et 3V litium batteri) og midt-uttaket til Analog-inngangen på kontrolleren. Jeg skal da kunne sette en potensiometer verdi og lese av spenningen på analog inngangen.

Du kan laste ned prosjektet her (på github) om du ønsker å se hvordan kildekoden til dette ble.

https://github.com/olekrisek/ATMEGA-LCD-ADC-I2C

Referanser