# ATMEL mikrokontrolleri >  Sensora apvienosana ar ekranu.

## kaross

HEllo visiem. Nezinaju ka nosaukt citaak topiku. daudz maz tas varetu rakturot to domu ko velos panakt.
Tatad ir sensors - gaisa spiediena. vajag kadu kontrolieri kurs butu pievienots signala izeja un uz LCD paraditu 4 ciparu skaitli. piemeram 0 - 3000.

sensoram ir 3 kajas. 
1. +5V
2. GND
3. Signal out.

5V zinasu ka dabut.  ::  Tatad sensoru iedarinasu. Talak sakas problemas ar dipsleju. Ir kadas idejas. saprotu, ka tas ir loti vienkarsi un primitivi, bet paslaik vel pamaza saprasana kontrolieru programmesana.

te no sensora specenes.

----------


## habitbraker

Nu visvienkaarshaak - njem simbolu LCD ar hd44780 kontrolieri. Datasheet ir info, gan piemeeri.
Taalaak njem mcu ar ADC. Njem Vref +5v un 0V. Paarveido binary rezultaatu uz binary coded decimal (google...) un izvadam uz displeja.  ::  (Ar 10-bit ADC ieguusi no 0-1024)

Bet cik peec jautaajuma saprotu, pa priekshu buus jaaiegulda neliels laiks, lai iemaaciitos taas lietas.

----------


## kaross

nu jau kaut kada skaidriba paradijas. kas ir domats ar ADC?
ja ar 10-bit iegusu 0-1024 tad ka lai iegustu 3000? vai laikam pedeja dala neesmu sapratis.
reali es tos 304kPA velos uz ekrana tikai ka milibar - 3040mbar.

----------


## habitbraker

ADC - analog to digital converter.

AA nu likaas, ka tev der jebkursh 4-ciparu skaitlis...
Ja vajag konkreetaas meervieniibas, tad ADC rzeultaats matemaatiski jaapaarveido. Tur tad tavs grafiks buus noderiigs
Pats tagad meegjinu to apguut - skat. shii threada viewtopic.php?f=24&t=6376 M_J postus

----------


## Vikings

Rēķini, ka ar savu pirmo konstrukciju neiegūsi +-0,03% precizitāti lai precīzi attēlotu 0 - 3000. Tādēļ neiespringsti, izmanto 10bit ADC, kurš ļauj mērīt 0 - 1024 un to vnk reizini ar 3. Jo precizitāte tomēr ļoti atkarīga no shēmas, bet lai izstrādātu labu shēmu ir jābūt pieredzei...

----------


## kaross

kontrukcija ko velos iegut ir domata automasinai iepludes kolektora spiediena merisanai. lidz ar to nederes tads variants lidz 1000 un vel reizinasana. spiediens paris sekunzu laika var izmainities 10 reizes un kur vel var paspet sareizinat. tas ir parak kjepigi. baigi augsta precizitate man nav vajadziga. tas 4. cipars ari nav tik loti svarigs. galvenais lai butu pirmie tris cipari precizi. ta ka reali 1-2% kluda ir pielaujama. tas manuprat ir daudz.

----------


## Vikings

Sareizināt paspēsi pilnīgi noteikti. Tev takš nevajag 1000 mērījumus sekundē, ne?
Ja paredzēts tīri vizuālai kontrolei, es taisītu ciklu, kurš atkārtojas 10x sekundē. Taimera pārtraukums->ADC konversija->pārrēķināšana uz mērvienībām->attēlošana->gaidīšana.

----------


## kaross

tada gadijuma var atmest pedejo ciparu un pariet uz 3 cipariem. 0 - 304.

----------


## Vikings

Ja gribi izmantot skaitļus virs 255 un zem 65535 tad jau ir stipri vienalga vai 304 vai 3040, jo tā pat visdrīzāk būs jāstrādā ar divus baitus saturošiem skaitļiem. Patiesībā šoreiz pat jāpierīt Epim - labs variants ar ko sākt būtu Arduino platforma, jo tā jau ir gatava plate ar novienkāršotu C valodu + pamācības un gatavi projekti netā ir līdz riebumam daudz. + nebūs jāiespringst par daudzām niansēm, kuras var traucēt pirmo projektu novest līdz galam, jo tās atrisinās Arduino kompilators.

----------


## kaross

255 ir 8bit un 65535 ir 16bit, bet kas tad ir 10bit?
Vari ieteikt kadu Arduino platformu? vinas ir diezgan dazadas. taja pasa ebay kaut vai. cik cena varetu but. velams kaut ko pavisam vienkarsu un letu. sensors jau vien maksa padargi.

----------


## Vikings

255 un 65535 minēju tādēļ, ka 8bit procī veikt darbības ar 10 vai 16 bitu skaitļiem, manuprāt ir vienlīdz sarežģīti. Kā nekā tikko skaitlis pārsniedz 255, daļa no tā ir jāglabā otrā baitā un ir jau vienalga cik tas cipars ir liels, aprēķinos jāizmanto abi baiti pilnībā. Brr, var šķist neizprotami ko es te mēģinu iestāstīt.  :: 
man gan pašam ar Arduino nav nekādas pieredzes, bet paskaties pameklē izplatītākos modeļus. Cik zinu, viens no izplatītājaiem ir Arduino Duemilanove, ar tā resursiem konkrētajam uzdevumam pietiks atliektiem galiem. Skaties Argusā vai jēbajā.

----------


## australia

10 bitus pieminēja, jo visticamāk kontrolieris, kuru paņemsi veiks ADC (alanog to digital conversion) ar 10 bitu izšķirtspēju. Un 10 bitos max skaitlis sanāk 1023.

Tātad, ja norādīsi kontrolierim lai tas mēra ienākošo spriegumu, piemēram, no 0-5v, tad viņš tev iedos vērtību no 0-1023

Ja norādīsi, lai mēra ienākošo spriegumu no 0-10v, arī tad saņemsi vērtības no 0-1023. tikai šeit katrs iegūtais skaitlis būs ar divreiz lielāku koeficientu, jo referencē norādīts divreiz lielāks spriegums: 10v

----------


## JDat

8-bit; 10-bit. Iedodiet datasheet tas spiediena sensoram. Imho tur pietiktu ar 8-bitiem. Neaizmirstam ka bitu skaits nosaka precizitāti, nevis cik ciparus uz displeja jāparāda. Man ir aizdomas ka var partizāniski bez MCU uztaisīt. Uzliekam kādu no lētajiem Voltmetru kitiem

Noregulē lai atbilst tavām prasībām un priecājies.

----------


## JDat

Bet ja nu tomēr ar MCU... 8-bit konvertācija. Nomēram spriegumu. ADC rādījums+50 un būs tas ko vajag. Respektīvi. Maksimālā vērtība (+5V uz ADC) ir 255. 255+50=305. Voila! mums ir 305 kPa. Gribam vairāk? Priekškam? Sensoram tā precizitāte, tāda viduvēja, spriežot pēc līknes. Visi ciprari ir aptuveni, lai nodemonstrētu ideju. Precīzākus ciparus jau pats autors atradīs. Ja uztaisa pa kruto, tad koeficientu iekš EEPROM. Divas pogas klāt. Varēs pārkalibēt bez programmas pārrakstīšanas. Elementāra lieta. Spiediena sensors ir lineārs (ja neskaita kļūdu). ADC mērijumu rezultāts arī ir lineāra lieta. Pietiek ar saskaitīšanu. Tas iesācēju līmenī. Pilnīgi pofig var arduino vai pliks MCU. Pofig vai ASM vai C. Galvenais ir princips. 16 bitu saskaitīšana (ja vajag) elementāri realizējama gan ar C, gan ar ASM.

----------


## Vikings

> ADC rādījums+50


 Paga paga. Kas tad tādā gadījumā notiek ar mērījumu zemo galu? Te ir jāreizina nevis jāskaita.

----------


## JDat

> ADC rādījums+50
> 
> 
>  Paga paga. Kas tad tādā gadījumā notiek ar mērījumu zemo galu? Te ir jāreizina nevis jāskaita.


 Sabridos. Esmu auns. Tur tiešām jāreizina. Tā ir ka man tikai 3 klašu izglītība, jo 4. klasē mācīja koordinātu lietas.  ::

----------


## habitbraker

Sanaak ka ar 1.2 jaareizina? Nu var sanaakt pagari

----------


## abergs

> Sanaak ka ar 1.2 jaareizina?


 1+(1/5)  ::

----------


## Delfins

Bildē taču ir FORMULA!....   Vo = Vs*(x1*P-x2))
attiecīgi izvelkam P.. pamatskola.

----------


## habitbraker

Nu augtaakaa matemaatika jau protams nav  ::  Bet daliishana un reizinaashana ar mcu gan  ::

----------


## Delfins

Nu tur beigās tikai viens reizinātājs konstante arī paliks, galvenais nodrošināt +/- stabilu Vs.
Tas par to, lai nevis te minēt to konstanti, bet izrēķināt, kā to paredzējis ražotājs.

----------


## JDat

P=Vout/0.0162218+1.110062893
Peldošā punkta matemātika uz AVR? Vai tas tiešām ir vajadzīgs? Tā tak tiešām var noēst visu resursu, ja C, vai sajukt prātā, ja asm.

P=Vout*6/5 nav vienkāršāk?

Tagad tik atrast kādu triku ar shift left un shift right, un reizināšana/dalīšana gatava.

EDIT: 



> P=Vout*6/5 nav vienkāršāk?


 Vout pēc samplēšanas. Respektīvi, ja pieņem ka 4.5V ir 230 ADC reģistrā.

----------


## next

> P=Vout/0.0162218+1.110062893
> Peldošā punkta matemātika uz AVR? Vai tas tiešām ir vajadzīgs? Tā tak tiešām var noēst visu resursu, ja C, vai sajukt prātā, ja asm.


 
Neviens praatiigs asmists peldoshaa punkta aritmeetiku nelieto (un praataa nejuuk), izreekjina ko vajag un smiin par panikas ceelaajiem.

----------


## habitbraker

Par to reizinaashanu ar, piemeeram, 1.2:

Ir zinaams, ka dalot binary skaitli ar 256, atliek tikai pabiidiit pa labi dalaamo pa vienu baitu, jeb atmest LSB baitu (tas pats ar citaam 2 pakaapeem - jaatmet tikai atbilstosh skaits labaas puses bitu)

Nu tad, ja pareizina 1.2 ar 256 ieguust 307.2. Var noapaljot uz 307. Taatad atliek ADCRES pareizinaat ar veselu skaitli 307 un beigaas pabiidiit rezultaatu pa vienu baitu pa labi.  :: 

P.s. Nu vienkaarshi pats mekleeju labas metodes  ::

----------


## JDat

> Par to reizinaashanu ar, piemeeram, 1.2:
> 
> Ir zinaams, ka dalot binary skaitli ar 256, atliek tikai pabiidiit pa labi dalaamo pa vienu baitu, jeb atmest LSB baitu (tas pats ar citaam 2 pakaapeem - jaatmet tikai atbilstosh skaits labaas puses bitu)
> 
> Nu tad, ja pareizina 1.2 ar 256 ieguust 307.2. Var noapaljot uz 307. Taatad atliek ADCRES pareizinaat ar veselu skaitli 307 un beigaas pabiidiit rezultaatu pa vienu baitu pa labi. 
> 
> P.s. Nu vienkaarshi pats mekleeju labas metodes


 Apmēram. Ir doma kādreiz urakstīt reizināšanas un dalīšanas bibliotēku priekš AVR un PICa. Vikings jau savam sliežu projektam uzrakstīja reizināšanu iekš C. Ideja vienkārša reizinot. MCU dara to pašu ko cilvēks kad reizina stabiņā. Pamēģini bināri sareizināt divus skaitļus. Pietiek ar shift un add komandām. Dalīšanā stipri līdzīgi tikai shift uz otru pusi un atņemšana. Nafig pašam rakstīt un vēl ar ASM? Neatradu internetā gatavu kodu. Atradu tikai teoriju. ASM tāpēc ka tas ir interesanti un kompakti.
Tāpatās arī ar kvadrātsakni. Jāpamēģina wiki piemērs.

----------


## habitbraker

Laikam tieshaam buus jaapamokaas un vienu reizi pa visaam reiezeem jauzraksta 16*16bit rezinaashanas rutiinu. Saak izskatiities, ka naakotnee vareetu nodereet   ::

----------


## Vikings

Tur nav jāmokās, tici man, tas nav sarežģīti. Bet noderēs pilnīgi noteikti.  ::

----------


## Delfins

Netā ir atrodams viss, protams diletantiski.. bet tas viss ir gatavs jau  ::

----------


## JDat

> Netā ir atrodams viss, protams diletantiski.. bet tas viss ir gatavs jau


 Za bazar ovičaeš? Linkus studijā. Pure ASM gan priekš AVR 8-bit , gan priekš PIC16xx MCU...

----------


## abergs

> Za bazar ovičaeš? Linkus studijā.


 Piemēram PIC:
http://www.piclist.com/techref/microchip/math/basic.htm
 ::

----------


## JDat

> Za bazar ovičaeš? Linkus studijā.
> 
> 
>  Piemēram PIC:
> http://www.piclist.com/techref/microchip/math/basic.htm


 Tas i pa smuko. Paldies! Visu cieņu! 
Liels paldies. Divritenis nav jāizgudro.

----------


## ezis666

> Za bazar ovičaeš? Linkus studijā. Pure ASM gan priekš AVR 8-bit , gan priekš PIC16xx MCU...


 matemātika priekš avr in deutsch
http://www.avr-asm-tutorial.net/avr_de/ ... index.html

----------


## JDat

> matemātika priekš avr in deutsch
> http://www.avr-asm-tutorial.net/avr_de/ ... index.html


 
heh.
Lielum liels padies. Noderēs...

----------


## habitbraker

Iemaaciities C ir vieglaak, nekaa nekaa urbties cauri taam rutiinaam (par metemaatiku)  ::

----------


## ansius

> Iemaaciities C ir vieglaak, nekaa nekaa urbties cauri taam rutiinaam (par metemaatiku)


 tā pat ar taksi braukt ir vieglāk nekā pašam pie stūres. mīļie C fanāti, jūsu galvenais pamatojums ir slinkums, tas ir ok, ja termiņi spiež, resursi daudz, koda kvalitāte nerūp, ka tik strādā.

ja vajag efektīvu kodu, resursu nav daudz - asm. pie tam iekš asm daudzas matemātiskās darbības noteiktos apstākļos var veikt daudz vienkāršāk nekā kodu ģenerēs kompilators, kaut vai dalīšana ar 256...

----------


## habitbraker

Ir taada jauka iespeeja paskatiities C ASM kodu - ja nepatiik, var aizvietot ar asm komandu/aam  ::

----------


## jeecha

Lielaakaa dalja kompilatoru ar iesleegtu optimizaaciju reizinaashanu ar konstanteem paarveertiis shiftoshanaas un saskaitiishanaas ja tas buutu aatraak...

Pilniigas muljkjiibas ir teezee par to ka cilveeki augstaaka liimenja valodas izveelas deelj slinkuma. Tas tiek dariits galvenokaart deelj produktivitaates (ir arii dazhi citi relatiivi nesvariigi iemesli, bet ne par to runa). Ieekonomeeto laiku var paarveerst papildus "fiichaas", papildus peljnjaa vai jaunaa produktaa... Un tas nebuut neattiecas tikai uz biznesu - ieteiktu arii visiem hobijistiem par to nedaudz piedomaat. Tavs laiks ir bezgaliigi daargs jo dziivo tikai vienreiz.

Protams arii asambleram ir sava vieta - ja piemeeram ir ljoti strikti ierobezhoti koda izmeera vai izpildes aatruma kriteeriji. Bet shajaa gadiijumaa parasti pilniigi pietiek ar atsevishkju kritisko sekciju optimizaaciju... Hobijistam vispaar nevajadzeetu chikaaties ar koda izmeera ierobezhojumiem - vienkaarshi nopeerc chipu ar vairaak atminjas - tie paaris sanji iekaartai vienaa eksemplaaraa neko nemainiis. Cita runa ja iekaartas tiek razhotas miljonos... bet kautkaa nav dzirdeets ka te kaads izstraadaatu iekaartas shirpatrebam...

----------


## JDat

kad beiksies tas dumais cepiens: asm vs c?  ::  Kā mazi bērni. Asmisti varētu kodēt ar asm GPS parsētājus. Cisti varētu kodēt realtime taskus, irq un 150 baitīgus tcp/ip stakus. Tas ironijai. Ja nopietni, tad labāk zināt abus un mācēt pareizi lietot. Habitbaker, kur probēma saprast asm? Ne jau asm vai c svarīgākais, bet gan algoritma izpratne un māka kodēt. Kamēr nezinu c, tikmēr asm lietoju. Tomēr plānoju arī c apgūt pārredzamā laika posmā.

----------


## habitbraker

Tur jau taa lieta,ka liidz shim visu laiku kodeeju asm. Tikai nesen saaku apguut C prieksh MCU (C zinaaju ieprieksh) un taapeec radaas iespeeja saliidzinaat.
ASM daudz izmantoju arii C kodaa, piemeeram,swapf instrukciju,kas C buutu jaadara ar biidiishanu utt..
Un pilniigi piekriitu - ir labizinaat abus!  ::

----------


## jeecha

Nav tak nekaada cepiena. Vienkaarshi skumjas par to ka indiviidi kuri tehnologjijas nepaarzin, neko praktisku uz taam nav taisiijushi un nevienu santiimu ar taam nav nopelniijushi tagad maaca citus kaa dziivot. Piemeeram indiviids kursh nezin to ka gan AVR gan PIC jau sen ir atrodams gatavas 8, 16 un patiesiibaa arii floating point aritmeetikas biblioteekas saak citiem kautko maaciit. Tas nav dumji? Vai arii indiviids kursh C nemaz nezin saak filozofeet CvsASM...

----------


## next

> Piemeeram indiviids kursh nezin to ka gan AVR gan PIC jau sen ir atrodams gatavas 8, 16 un patiesiibaa arii floating point aritmeetikas.


 A man jautaajums, nu paraadiet man vienu projektu kur kontrolierim vajadziiga float point aritmeetikaa?

----------


## JDat

Jap, stulbi ja nemeklē. Ne vienmēr galva sakomutējas ar googi.  :: 

Kur vajag float? Teorijā: Tev ir konkrēta punkta koordinātas iekš EEPROM un Realtime (reizi sekundē) GPS dati. Parādi uz LCD attālumu līdz punktam, teiksim, metros. GPS moduļa Waypoint funkcijas nelietojam. Izmantoja no GPS tikai RMC teikums, pārējais uz MCU. Tā pat jebkurā brīdī useris var pievienot vēl dažus GPS punktus... Rēķināšana vs lookup tabulas, tas ir kompromiss. Ja FLASH jau ir pilns un lookupiem vietas nav, tad rēķināt izdevīgāk, citreiz lieko FLASS labāk aizsist ar lookup tabulām.

Integer matemātika? Vikinga sliedes projektā ir. Pie tam Vikings pats rakstīja 32 bit reizināšanu un dalīšanu. Ar C. Klāt vēl bija kods, kas uz NOKIA 3310 zīmē grafiskus menu utt. Vajadzēja ātru matemātiku (šoreiz 32 integer un iespiesties atlikuāsjos 5% FLASHa). Bija ko noņemties. Interesanti arī. Par niansēm var prasīt Vikingam. Varbūt esmu kaut ko sajaucis un neprecīzi izteicies.

----------


## karloslv

Kāpēc lai to nevarētu izdarīt ar fixed point? Es vienmēr esmu izticis ar to, pat sarežģītākiem aprēķiniem. Jāseko tikai līdzi nepieciešamajai precizitātei un jādomā ar galvu. Daudz.

----------


## jeecha

Goba, muusdienu jaunatnei, atshkjiriibaa no tiem kas pagaajushaa gadsimta 90o viduu lielaako diennakts dalju pavadiija r1g vai veelaak rv1g 2ajaa staavaa aiz dzelzs durviim - domaashana ar galvu var arii buut svesha  ::

----------


## habitbraker

Kaads peeksni sakars ar muusdienu jaunatni??   ::

----------

