Evo za početak, ovdje je dobar tutorijal kako programirati neke ATtiny MCU.
Podržano je dosta vrsta ATtiny procesora, zbilja nije komplicirano, ja sam u svoj IDE dodao zasad samo ATtiny ali vidim da ima i za Atmege i ostale MCU.
Ovo je super jer se sada mogu raditi i projekti koje želimo napraviti kao zasebne uređaje poput termometra.
Kasnije ću dodati i za ostale MCU tutorijale.
Prije nego se uprogramira sketch u MCU može se, ali nije nužnu, učitati bootloader u novi čip.
Kolko vidim na jednoj stranici preporučuju da se to učini prije programiranja.
Ako neko ima core files za atmege i ostale MCU bilo bi super da podjeli s nama
U prilogu su core fajlovi za ATtiny za Arduino IDE 1.0 i 1.5 verzije
Jučer navečer sam uspješno učitao bootloader i blink program, tek toliko da vidim i potvrdim funkcionalnost MCU.
Danas navečer ili sutra ujutro bih trebao upogoniti svoj termometar na attiny84 MCU
Nisam koristio interni clock već sam koristio vanjski quartz, 16.000 MHz.
Pronašao sam i core files za Atmege i još par MCU, pa i to dodajem na forum
Zahvaljujući ovim core fajlovima jako smo povećali iskoristivost našeg Arduina, prvo razvijemo svoj program, testiramo ga, potražimo odgovarajući MCU i istim tim arduinom uprogramiramo program u friški MCU.
Jedan update, dodajem fajl koji ispravlja bug u program avrdude, naime ako program ima više od 4.5 kB izbacuje čudnu pogrešku. To je rješeno sa novom verzijom avr-dudea, a evo i fajl koji će i nama ukloniti bug iz naše verzije.
Ovo je isprobano i radi
cjelo jutro sam se mučio da ubacim svoj program termometra u ATtiny84 ali sve preko 4.5 kb nije išlo...
sada moj termometar se veselo vrti na njemu
fajlovi i upute u prilogu za WIN i MAC OS kao i readme fajl.
zanima me kako promjeniti PWM frekvenciju na Attiny MCU, točnije Attiny84.
Htio bih ju podić na 32500 ili više Hz za potrebe step-down pretvarača.
Našao sam PWM.h library za arduino koji funkcionira na Atmega328P, sa njom se vrlo jednostavno može promjeniti frekvencija i može se namjestiti da se Timer0 zadužen za delay() i ostale funkcije di je tajming bitan ne dira.
Proučavao sam malo datasheet i ja bi pin PB2 koristio kao PWM izlaz, i ako sam dobro shvatio u TCCR0A registru treba postaviti bitove ovako: 01000001 <- to je phase correct PWM na OCA0, OCAB isključen, WGM01 bit podešen na 0, a WG00 bit podešen na 1.
TCCR0B bi trebalo podesiti na 00001010 <- WGM02 bit podešen na 1, Phase correct PWM, a prescaler podešen na 8 sa 010.
Znači sa ovim postavkama bi trebao dobiti ovo:
TCCR0A 01000001 <- (COM0A1 = 0; COM0A0 = 1; COM0B0 = 0; COM0B1 = 0; 0; 0; WGM01 = 0; WGM00 = 1 //COM0A1 i COM0A0 ovako podešeni postavljaju OCA0 u Compare Match mod.
TCCR0B 00001001 <- (FOC0A = 0; FOC0B = 0; 0; 0; WGM02 = 1; CS02 = 0; CS01 = 0; CS00 = 1 // Ovime se prescaler postavlja na 1 što mi uz clock frekvenciju od 16 MHz daje PWM frekvenciju od 31372,54 Hz
Na pinu PB2 (OCA0) -> Phase correct PWM (WGM02 = 1; WGM01 = 0; WGM00 = 1 Mode 5 u tablici na stranici i frekvenciju od oko 31.4 kHz
Molio bih da neko stručniji kaže koju riječ, da li je ovo dobro.
E sad još jedno važno pitanje, koji tajmer bi na Attiny84 utjecao na funkcije delay() i ostale ?
12-26-2014, 01:06 PM (This post was last modified: 12-26-2014, 01:24 PM by mikikg.)
Stvarno nemam iskustva sa (originalnim) Arduino platformama
Ako je tu 8bitni MCU ne verujem da ces moci nesto korisno od njegovog PWM da dobijes. Mozda mozes da podignes PWM freq ali ces sigurno izgubiti rezoluciju tako da slabo sa tim moze nesto (pametno) oko SMPS da se pravi. Eventualno ako to budes pisao u assembleru ali nije taj PWM za takve stvari predvidjen.
Za SMPS primene se uglavnom koriste dsPIC-ovi ili neka ARM Cortex jezgra, dakle za generaciju-dve bolja jezgra.
Najbolji u tom pogledu je TI Piccolo, on razvaljuje kako dobro radi!
Pored samog PWM tu ces imati potrebe da radis regulaciju i tu je vec poprilicno zahtevna matematika (Floating Point za PID) a to 8bitna jezgra jako lose (sporo) rade.
Npr za deljenje dva FP broja, 8bitni MCU mogu potrositi nekoliko hiljada clock-ova a za PID algoritam ce ti trebati nekoliko puta da radis takve operacije u jednom "prolazu".
CortexM4 ima HW modul koji se samo bavi FP matematikom i umesto nekoliko hiljada ti rezultat dobijes u 10-ak clock ciklusa i jos na sve to osnovni clock procesora je 10x brzi nego kod ovog Arduina.
Sa tim vec moze da se napravi nesto korisno …
Da li je bolje uzeti TL431 za izvor referentnog napona ili je bolje koristiti interni 1.1V referentni napon od 328P ?
Htio bih postici sto tocnije mjerenje struje i napona, a sa 1V referencom, 0.1R shuntom mogu mjeriti struju od 10 mA pa navise posto je ADC od 328P 10 bitni
Trebalo bi za buck napraviti neki multifunkcionalni mjerni uređaj, znači mjerio bi struju, napon, snagu na izlazu, zanima me kako je to najbolje izvesti ?
Znači da to bude malo preciznije, tj kvalitetnije, za struju bi bilo dobro uzeti one jeftine module koji mjere pomoću hallova, nebih shunt koristio.
Napon preko razdjelnika, ali bi ih napravio od preciznijih otpornika, tipa 1% ili 0.5%
Ne radim sa Arduinom, ali pokušaću da ti pomognem. Pogledaj šta imaš i kako su deklarisani tipovi promenljivih u LcdControl.h.
Kako mi se čini, problem je u tipu promenljive LedControl koga kompajler ne vidi.
To je onaj DS1307 za sat koji pamti vrijeme i kad je procesor isključen, bar ja tako mislim?
@npejcic
Gdje da to nađem i kako se to mijenja, jer kad ukucam tu funkciju slova bi trebala biti podebljana ili promjeniti boju kada ga prihvati al kod mene se ne mijenja?
Da, DS1307 je real time clock koji pamti vreme i kada nema napajanja "master" mikrokontrolera. Koristi I2C konekciju. Ako ga nemaš na ploči i nećeš ga koristiti, najbolje je isključi te rutine iz tvog projekta.
Što se tiče pitanja gde to da nađeš, nisam siguran kako je to kod Arduina ali pogledaj u istom folderu gde ti je projekat ako si taj primer preuzeo sa net-a. Trebaš pronaći fajl LcdControl.h negde na hard disku ili ga eventualno preuzeti sa neta ako je to neka univerzalna biblioteka. Tek kada IDE (razvojno okruženje) ima uvid u taj fajl, počeće da boji kod, kada prepozna deklaracije iz njega. Normalno je što ti sada ne boji... nezna šta da boji.
U tom slučaju moraćeš da pronađeš "biblioteku" LcdControl.h, odnosno LcdControl.c (ili šta je već ekstenzija u kompajleru za Arduino). Samo kopiranje koda je dovoljno ukoliko koristiš samo ugrađene (default) "biblioteke" koje dolaze uz sam Arduino kompajler. Ostale koje su izrađene od strane trećih korisnika, kao što je pretpostavljam tvoj slučaj, moraju se uključiti u tvoj projekat. Pogledaj tamo odakle si preuzeo copy/paste kod, verujem da ima detalja oko ove "biblioteke" gde je naći i slično...
Zaboravih, da pojasnim. U abcd.h fajlovima nalaze se takozvani header-i, tj. pozivi ka funkcijama, procedurama i promenljivama u samoj biblioteci. Glavna stvar, tj. kod same biblioteke nalazi se u nekom drugom fajlu. Kod programa na C jeziku to su abcd.c fajlovi.
Ovako izrađena dva fajla se koriste zatim u više različitih projekata ili C fajlova u okviru istog projekta. Dovoljno je navesti u svakom C fajlu poziv na odgovarajući header bibloteke, i sve funkcije iz te biblioteke viće raspoložive u istom. Ovim se značajno povećava preglednost i portabilnost koda.
Pravim neki sklop sa arduinom, na njemu imam LCD 16x2, 2 prekidača (samo na pritisak propusti), i relej/triak koji treba da aktivira nešto.
Radio se o timeru, na kojem bi trebao jednim dugmetom da biram vrijeme od 0-15min (svaki minut pojedinačno) i drugim dugmetom da aktiviram da vrijeme odbrojava npr: izaberem 10min i pritisnem start on aktivira relej/triak i odbrojava do 0min i onda isključi relej/triak?
Nešto već pokušavam ali mi ne ide nikako.