atmega 16 i matlab

Rasprava o AVR mikrokontrolerima, AVR projekti i drugo vezano za AVR...

Moderators: pedja089, stojke369, trax, InTheStillOfTheNight

Post Reply
bura
Posts: 10
Joined: 21-11-2010, 21:10

atmega 16 i matlab

Post by bura »

Pozdrav ljudi.
Mjerim temperaturu s 1-wire DS1820 senzorom koristeći atmegu 16. Uspio sam uspostaviti komunikaciju s računalom preko serijskog porta (RS232) i prikazati izmjerenu temperaturu na monitoru. Zanima me kako bih mogao prikupljene izmjerene podatke prikazati u matlabu ili u nekakvoj takstualnoj datoteci.
Hvala.
User avatar
InTheStillOfTheNight
Odlično uznapredovao
Odlično uznapredovao
Posts: 938
Joined: 01-06-2006, 17:54
Location: Zagreb

Re: atmega 16 i matlab

Post by InTheStillOfTheNight »

Tvoje pitanje nema nikakve veze sa AVR-om, niti sa PIC-om ili bilo kojim drugim mikrokontrolerom. Na samom MCU ne možeš napraviti više ništa osim dobro "našminkati" protokol komunikacije te odrediti točan DATA format u kojemu šalješ bilo kakav paket.

Ono što tebe zapravo muči, kako slutim, je kako upravljati s onime što dobiješ u buffer PC-a... Postoji previse metoda koje možeš primjeniti od nekog BASIC-a do VS-a. Čak i stari DOS BASIC jako dobro zna otvoriti COM port i pročitati podatke s njega...

Skini si Visual Studio, instaliraj, pronađi na netu primjere kako se koristi COM port, te primjere kako se nešto zapisuje u file... Kad pošalješ nešto na PC, zaboravi i na MCU i sve što znaš o njemu jer u tom trenutku počinješ pisati aplikaciju za PC, a to je nešto sasvim drugo...

Za matlab ne znam, ali se sigurno ne tiče MCU-a nego eventualnih mogućnosti matlaba i onoga što dolazi na COM port. Vrlo lako je na mikrokontroleru prilagoditi paket podataka za bilo što, ali sa PC-a i nije tako jednostavno iskoristiti taj paket koji se nalazi u buffer-u ako ne poznaješ barem osnovne stvari programiranja na PC-u
InTheStillOfTheNight
User avatar
InTheStillOfTheNight
Odlično uznapredovao
Odlično uznapredovao
Posts: 938
Joined: 01-06-2006, 17:54
Location: Zagreb

Re: atmega 16 i matlab

Post by InTheStillOfTheNight »

Ako ti ne treba ništa komplicirano sa tim podatcima imam ti ja jedan program imena "terminal.exe" koji ti moze otvoriti COM port i zapisivati u txt datoteku sve što dođe u buffer...

Tim načinom bi jednostavno zaobišao programiranje na PC-u i dobio nekakav txt dokument sa podatcima iz mikrokontrolera...
InTheStillOfTheNight
Cazlo
Posts: 1
Joined: 07-07-2011, 09:34

Re: atmega 16 i matlab

Post by Cazlo »

Teraterm se jako dobro snalazi u tome, moguće je čak napisati i skripte koje omogućavaju prilagođeni upis u tekstualnu datoteku i sl...

Link:
http://hp.vector.co.jp/authors/VA002416/teraterm.html" onclick="window.open(this.href);return false;

Readme:
http://hp.vector.co.jp/authors/VA002416/teralin1.txt" onclick="window.open(this.href);return false;

poz

:wink:
bura
Posts: 10
Joined: 21-11-2010, 21:10

Re: atmega 16 i matlab

Post by bura »

Hvala na odgovorima.
Nisam ni mislio naglasiti da koristim atmegu 16 nego mi je baš potrebno iz PC buffera prebaciti podatke u nekakvu *txt datoteku. Odakle bi mogao skuniti taj terminal.exe?
Još jedno pitanje: DS1820 senzor mjeri temperaturu i sprema u svoj interni RAM od 16 bita, te ponovnim mjerenjem briše te podatke i zapisuje nove. Kako bih mogao kopirati svako mjerenje u RAM mikrokontrolera i nakon određenog vremena prebaciti sve skupa na računalo u *txt datoteku.
User avatar
InTheStillOfTheNight
Odlično uznapredovao
Odlično uznapredovao
Posts: 938
Joined: 01-06-2006, 17:54
Location: Zagreb

Re: atmega 16 i matlab

Post by InTheStillOfTheNight »

U PM mi pošalji mail. Ne mogu zakvačiti *.exe na forum, pa ti pošaljem kao *.pdf na mail i samo promjeniš ekstenziju u *.exe

Ako želiš pohranjivati vrijednost u ram to radiš na način da napraviš polje te pokazivač na poziciju u polju. Nakon svakog uzorka povečavaš pokazivač polja sve do gornje granice polja. Polje ti mora stati u RAM, i još moraš napraviti dio programa koji ti, kada pokazivač polja dođe na gornju vrijednost, pošalje sve preko UART-a te resetira pokazivač polja na prvi član u polju...

Sad samo zavisi u kojem programskom jeziku to programiraš.
InTheStillOfTheNight
User avatar
InTheStillOfTheNight
Odlično uznapredovao
Odlično uznapredovao
Posts: 938
Joined: 01-06-2006, 17:54
Location: Zagreb

Re: atmega 16 i matlab

Post by InTheStillOfTheNight »

Digni source na forum, pa cemo onda vidjeti sta se s tim moze napraviti... Poslao sam ti na mail terminal.pdf pa samo ga prebaci u termilan.exe
InTheStillOfTheNight
bura
Posts: 10
Joined: 21-11-2010, 21:10

Re: atmega 16 i matlab

Post by bura »

Source je malo oveći pa ću ti poslati na mail kao C fajl. Uglavnom program se sastoji od izbornika koji se prelistava pritiskom na tastere i prikazuje na lcd-u. Prvi menu je prikaz tamperature, drugi prikaz sata i datuma koji se mogu namjestiti na željenu vrijednost pritiskom na taster. Treći ne namještanje gornje i donje granične temperature koji služe kao alarmi ako mjerena temp prijeđe te granice da se upali ledica. Četvrti je komunikacija preko UART-a gdje je moguće namještanje svega već prije navedenoga.
Ja sam zamislio da još napravim da pri svakom mjerenju temperature prebacim u RAM izmjerenu vrijednost i trenutno vrijeme, te da to mogu poslije poslati na računalo i prikazati u nekoj *txt datoteci ili matlabu da se vidi kako se mijenjala temperatura tokom vremena (ovisno koliko može stati u RAM).
buco-1
Napredujem
Napredujem
Posts: 105
Joined: 24-10-2010, 21:22

Re: atmega 16 i matlab

Post by buco-1 »

InTheStillOfTheNight wrote:Ako želiš pohranjivati vrijednost u ram to radiš na način da napraviš polje te pokazivač na poziciju u polju.
U stvarnosti to radi indeksni brojač. Postavljanjem njegove vrijednosti određuješ početnu poziciju polja RAM-a, internog eeproma (ili flasha ako imaš ATmegu)a testiranjem iste veličinu polja rama.
Zar ti nije bolje podatke pohraniti u eeprom? Zato on služi, uglavnom. DS1820 je ionako užasno spor (uvjetno rečeno) za MCU.
bura wrote:...i prikazati u nekoj *txt datoteci ili matlabu da se vidi kako se mijenjala temperatura tokom vremena

Zašto? Ako je samo da se može vidjeti. Rekao si da imaš LCD spojen na MCU. On služi da bi se nešto vidjelo, prikazalo...

Reako si i da ćeš pohraniti onoliko podataka koliko dozvoljava ram. Ram ni u jednom jedinom računalu, a ni ozbiljnijem programu, ne služi za pohranu ničega već za brzi protok podataka ili skupa podataka (grafičko polje isl.).
Spoji si jednu serijsku memoriju (par megabita) ili MMC/SD i možeš čuvati hrpe podataka za analize.
Drugo je ako je to slanje podataka u PC više kao neko učenje. Za izradu programa te namjene za PC zanimljivi su, i jednostavni za učenje, script jezici; VB, java,php...
bura wrote:Četvrti je komunikacija preko UART-a gdje je moguće namještanje svega već prije navedenoga.
Čemu bi to realno služilo? Pošto je to preko UART-a znači da je u dometu par metara a to implicira jedno, da je bezmisleno. Namještanje možeš obaviti preko tastera i LCD-a uz prikladnu rutinu.
Za iole ozbiljnije daljnsko upravljanje sustavom postoje puno bolja riješenja od UART-a.
Opet da kažem, ako je to samo u svrhu učenja i testiranja osobnog znanja, to je druga stvar.

Jesi ti to od nekud kopirao, taj program, pa sad malo prepravljaš ili je to potpuno tvoj izvorni kod? :wink:
Today's scientists have substituted mathematics for experiments, and they wander off through equation after equation, and eventually build a structure which has no relation to reality.
- Nikola Tesla
bura
Posts: 10
Joined: 21-11-2010, 21:10

Re: atmega 16 i matlab

Post by bura »

Ovo što ja radim je diplomski na fakultetu i nema neku konstruktivnu svrhu nego je bit učenje i čisto me zanima kako se to sve skupa realizira jer nikad prije nisam radio s mikrokontrolerima.
Što se tiče spremanja podataka pomislio sam da bi EEPROM bio bolji, našao sam u datasheetu atmege16 način na koji bi mogao pohranjivati podatke pa mislim da ću uspiti nešto iskemijat.
Što se koda tiče, uzimao sam dijelove koda iz MikroC-a i spajao ih u jednu cjelinu, ali dosta toga sam napisao sam ili koristio primjere s interneta, te ih mijenjao i prilagođavao.
buco-1
Napredujem
Napredujem
Posts: 105
Joined: 24-10-2010, 21:22

Re: atmega 16 i matlab

Post by buco-1 »

bura wrote:Ovo što ja radim je diplomski na fakultetu i nema neku konstruktivnu svrhu nego je bit učenje
Vjeruj mi ova tvoja rečenica je rijetkost. Napokon da netko nešto poželi i naučiti. No jedna me stvar malo "zabrinjava", kad smo kod učenja, a to je; zašto tvoj mentor ne izistira na relanom primjeru a ne ovom koji je u praksi besmislen? Ti si budući inženjer, i nada u bolje sutra, pa mi nije jasno čemu služi takav primjer programa.
bura wrote:Ja sam zamislio da još napravim da pri svakom mjerenju temperature prebacim u RAM izmjerenu vrijednost i trenutno vrijeme...
Gle, u praksi, stvarnom programu, to tako mora i biti. Definira se polje za privremeni prihvat podataka a kasnije, po potrebi, to se polje kopira u eeprom. No pošto je brzima 1 wire protokola kao i mjerenja izuzetno mala možeš direktno snimati u eeprom.
E sad, ako je stvar u učenju onda bih ti savjetovao da, radi drugih primjera, kopiraš podatke u polje rama a zatim u eeprom, ili bilo koju drugu jedinicu za pohranu podataka. Jer je to stvar principa. Načina rada. Bez obzira bilo to Von Neumanovo računalo i Harvardsko uvjek se privremeni podaci spremaju u ram. Pošto radiš sa računalom specijalne namjene, MCU-om, nebi bilo loše razumjeti njegovu strukturu i način rada.

Samo kopiranje rutina i pokušaj njihove redefinicije nemora uvijek biti najsretnije riješenje, često i nije, no jasno mi je čemu vas uče u školi. Zapamti, za računala specijalne namjene ne važe pravila kao za x86 mašine (IBM standard PC-a). Vjerujem da ti je to jasno. To su dva ne baš ista svijeta, kao assembler i HPL programiranje. :wink:
Today's scientists have substituted mathematics for experiments, and they wander off through equation after equation, and eventually build a structure which has no relation to reality.
- Nikola Tesla
User avatar
InTheStillOfTheNight
Odlično uznapredovao
Odlično uznapredovao
Posts: 938
Joined: 01-06-2006, 17:54
Location: Zagreb

Re: atmega 16 i matlab

Post by InTheStillOfTheNight »

Malo sam pregledao program koji bi ipak trebalo nekako podići na forum pa mi je malo nejasan koncept programa u C-u. U header, dakle h file nikad ne pišeš funkcije. Compiler to može prevesti jer uvijek h file ubacuje iznad C file-a pa za compiler to izgleda kako se radi o C fileu i zato to zna prevesti. Program i funkcije uvijek pišeš isključivo u C fileu, dok u h file upisuješ samo prototip funkcija C file-a.

Također mi nije jasno za koji je ovo prevodilac pisano, jer za AVR Studio i WINAVR očito nije.
Evo recimo jedna linija programa za koju ne postoji nikakav define
#define UP_1 Button(&PINB, 1, 1, 1)
Button nije nigdje definiran u ova 2 file-a što si mi poslao.

SREG_I_bit = 1;
Ovo nikako nije AVR studio jer postoji ASM naredba koja upravlja I bitom u SREG-u imena cli i sei, a u AVR studio to može biti napisano na 2 načina:
ASM("sei");
sei();

Što se tiče same ideje da se nešto negdje pohranjuje po nekim kalkulacijama vidim da je besmisleno bilo što bilo kamo pohranjivati u sam MCU. Eventualno negdje van u externi FLASH, na SD karticu ili bilo što drugo. ATMEGA16 ima samo 1024 byte-a RAMA, pa kad oduzmeš STACK te varijable koje koristiš možeš eventualno u RAM pohraniti oko 200-300 uzoraka temperature. U interni eeprom možeš pohraniti još manje. Iskusniji bi mogli to ubaciti i u FLASH samog MCU-a ali to jednostavno nema smisla.

U praksi postoje samo 2 normalne metode kojima možeš napraviti analizu temperature kroz neko vrijeme:
Ako si stalno spojen na MCU preko UART-a možeš svaki event temperature pohranjivati na računalo i kasnije analizirati što hoćeš.
Drugi način je da napraviš vanjsko spremište podataka uvijek povezano na MCU -> EEPROM, SDCARD, FLASH po bilo kojem protokolu, i svaki event temperature upisuješ tamo, pa onda kasnije možeš iste te podatke čitati i slati na PC.

Niti jedan MCU nije predviđen da pohranjuje evente bilo čega. Niti eeprom AVR-a nije predviđen da se u njega pohranjuju takve vrste podataka. U eeprom se eventualno pohranjuju postavke nekog programa do kojih se mora doći svaki puta kada ostaneš bez napajanja: npr: Adresa MCU-a na nekoj zajedničkoj sabirnici, postavke rada uređaja... U pravilu EEPROM AVR-a služi samo za pohranu podataka koji mogu biti promjenjeni od strane aplikativnog programa, ali moraju ostati poznati i nakon gašenja MCU-a.
InTheStillOfTheNight
bura
Posts: 10
Joined: 21-11-2010, 21:10

Re: atmega 16 i matlab

Post by bura »

Buco-1, jest da moj rad nema neku primjenu u profesionalnim krugovima ali to ostaje na faksu kao laboratorijska vježba. Sama UART komunikacija mi nije bio dio diplomskog ali sam ga sam dodao čisto da vidim kako funkcionira. Ali hvala na savjetima.

Znam da bi bilo bolje da se sprema na neku memorijsku karticu ali koristit ću EEPROM (vidit ću još hoću li direktno zapisivati u njega ili prvo u RAM), jer trenutno nemam SD kartcu pa mi je ovo malo jednostavnije. Kod je napisan u MikroC-u. On ima neke svoje predefinirane funkcije npr. Button(&PINB, 1, 1, 1) znači da je spojeno tipkalo na portu B, pinu 1, treba biti pritisnuto bar jednu µs i aktivno je u logičkom stanju 1.
SREG_I_bit = 1; je također njegova naredba za omogućavanje globalnih interrupta.
Što se tiče c. i h. fajlova to ću promjeniti.
Ne znam kako bi cijeli kod stavio na forum, malo je velik. Ali skužio sam kako se pristupa EEPROM-u pa mislim da bih mogao preko polja i pokazivača na poziciju to spremiti.
Ako ikoga zanima kod samo neka pošalje poruku u PM pa ću mu ga poslati na mail.
Post Reply