atmega 16 i matlab
Moderators: pedja089, stojke369, trax, InTheStillOfTheNight
atmega 16 i matlab
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.
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.
- InTheStillOfTheNight
- Odlično uznapredovao
- Posts: 938
- Joined: 01-06-2006, 17:54
- Location: Zagreb
Re: atmega 16 i matlab
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
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
- InTheStillOfTheNight
- Odlično uznapredovao
- Posts: 938
- Joined: 01-06-2006, 17:54
- Location: Zagreb
Re: atmega 16 i matlab
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...
Tim načinom bi jednostavno zaobišao programiranje na PC-u i dobio nekakav txt dokument sa podatcima iz mikrokontrolera...
InTheStillOfTheNight
Re: atmega 16 i matlab
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
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
Re: atmega 16 i matlab
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.
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.
- InTheStillOfTheNight
- Odlično uznapredovao
- Posts: 938
- Joined: 01-06-2006, 17:54
- Location: Zagreb
Re: atmega 16 i matlab
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š.
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
- InTheStillOfTheNight
- Odlično uznapredovao
- Posts: 938
- Joined: 01-06-2006, 17:54
- Location: Zagreb
Re: atmega 16 i matlab
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
Re: atmega 16 i matlab
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).
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).
Re: atmega 16 i matlab
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.InTheStillOfTheNight wrote:Ako želiš pohranjivati vrijednost u ram to radiš na način da napraviš polje te pokazivač na poziciju u polju.
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...
Č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.bura wrote:Četvrti je komunikacija preko UART-a gdje je moguće namještanje svega već prije navedenoga.
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?
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
- Nikola Tesla
Re: atmega 16 i matlab
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.
Š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.
Re: atmega 16 i matlab
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:Ovo što ja radim je diplomski na fakultetu i nema neku konstruktivnu svrhu nego je bit učenje
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.bura wrote:Ja sam zamislio da još napravim da pri svakom mjerenju temperature prebacim u RAM izmjerenu vrijednost i trenutno vrijeme...
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.
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
- Nikola Tesla
- InTheStillOfTheNight
- Odlično uznapredovao
- Posts: 938
- Joined: 01-06-2006, 17:54
- Location: Zagreb
Re: atmega 16 i matlab
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.
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
Re: atmega 16 i matlab
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.
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.