# ATMEL mikrokontrolleri >  Vēlme padiskutēt par kāda Elfa produkta pieslēgšanu pie AVR mcu.

## Rigo

*​*Labdien visiem apkārtējiem, kas nu vēl šeit iegriežas.
Ir *Elfa produkts ar kodu 10-753-27* un ir nepārvarama vēlme to iedarbināt izmantojot kādu no mcu. Ir pieejami gan PIC, gan AVR. Netiks smādēts arī padoms izmantot kādu no STM32 Discovery platēm.
Padomu: nokačā šo hex-u un viss kātībā, nedomāju par labu esam.

Tiešām gribētos mierīgi ar kādu parunāties. Varam runāt gan Arduino IDE, gan GCC gadījumā, ja diskusija sākas ar AVR izmantošanu. Netiks smādēts arī kāds cits vērtīgs ieteikums.

Palasi datasheet un viss notiksies - nav vērts. Lasu un vajadzības gadījumā vairākās valodās (ar izpratni).

Paldies, ja kāds vismaz izlasīja līdz galam šo postu.

----------


## next

Es vispaar nevaru iedomaaties mcu daraamu darbu kad taads verkjis buutu vajadziigs.
Ja ir zinaami tad pastaastiet man arii.

----------


## Rigo

Sveicināti,

un vispār iedomāties kādu darbu, ko dara mcu, variet?

Pretjautājums. Kam domāts displejs?

----------


## M_J

Tā kā pēdējos gados niekojos ar rūpniecisko elektroniku, tad ir šādas tādas domas, kur tādu varētu izmantot. Cits jautājums, kāpēc no neskaitāmajiem piedāvājumiem izvēlēties tieši šo? Man priekšā uz galda stāv Weintek panelītis, kuru gribu caur RS485 pieslēgt pie sava kontroliera. Pagaidām gan to neesmu izdarījis, viss notiek no datora, caur to pašu RS485, izmantojot Modbus RTU protokolu. Bet, kad kontrolieris būs uzstādīts objektā, manuprāt ērtākais veids, kā operatīvi kaut ko pamainīt iekārtas darbībā ir tieši tāds vai savādāks panelītis. Protams, tagad ir stilīgi visam tam izmatot telefonu/planšeti un tādā garā, bet ir vietas, kur tas 100 gadus nav vajadzīgs. Par autora konkrēto panelīti gan neko nemācēšu pateikt. Ar AVR esmu uz "tu", bet ar Arduino uz "jūs" - zinu, ka tāds ir, daži paziņas ar to strādā, man būtu nopietni jāpiestrādā lai savietotu savus jau gatavos izstrādājumus ar šo platformu, nu apmēram kā savietot SECAM ar NTSC televīzijā.

----------


## Rigo

Problēma atrisināta. Vaina bija "neliela" kļūdiņa - īpaši netika minēts, ka ražotājs izgatavo šos LCD moduļus ar dažādiem kontrolieriem. Protams, tiem atšķiras inicializācijas kārtības. Bet pārdodas zem viena nosaukuma.
Ja kādam interesē tiši kas bija pie vainas, varēsim papļāpāt.

Oj, nepamanīju: M_J minēja "Ar AVR esmu uz "tu", bet ar Arduino uz "jūs".
Kur ir atšķirība starp AVR un Arduino!? Jautājums retorisks.

----------


## M_J

Atšķirība starp AVR un Arduino? Manuprāt uz to pusi, kā atšķirība starp Intel procesoru un Windows operētājsistēmu. Un, ja esmu līdz šim visu veidojis Linuxā, tad varētu būt zināmas problēmas migrēt uz Windows. Tas tā - salīdzinājums, varbūt ne sevišķi korekts. Lieta tāda, ka 90-tajos, kad sāku ar AVR strādāt, Atmelam bija tikai daži AVR kontrolleri, Arduino vēl nebija, C priekš AVR varbūt arī bija, bet es par to nezināju, jo vēl nebija sācies interneta uzvaras gājiens. Vairākkārtīgi esmu mēģinājis piespiest sevi sākt lietot C, bet līdz šim neveiksmīgi. Ja Assemblerī es varu visu pilnībā kontrolēt, tad C man ir sajūta, kā meklējot kaut ko tumšā istabā, visu laiku kaut ko apgāžot, sāpīgi uzgrūžoties asiem stūriem. Man patīk ja es nosaku, kuru reģistru, kādām vajadzībām izmantošu, kurā atmiņas adresē glabāšu to vai citu vērtību. Ja ir svarīga programmas ātrdarbība (un man vairumā gadījumu tā ir primāra), tad ASMā es zinu, ka varēšu precīzi pateikt, cik laika aizņems tā vai cita operācija, un ja uz konkrētā kontroliera kaut kas principā ir izdarāms, tad ASMā es to varēšu izdarīt. Iekš C man šīs parliecības nav. C, protams, vajadzētu apgūt, nav ērti rēķināt naturālo logoritmu ASMā, bet pēc Arduino īsti nejūtu vajadzību. Lai katru reizi kontroliera pāršūšanai nevajadzētu izmantot programmatoru? Man tāpat to nevajag, man ir savs bootloaderis, ātrāks, kā Arduino, kas pie lielākām programmām nav mazsvarīgi. Bet nekad nesaki nekad! Iespējams, ka es pašlaik smagi braucu auzās. Labprāt šīs lietas apspriestu ar cilvēku, kas lieto visu - gan ASMu, gan C, gan Arduino. Diemžēl līdz šīm visi Arduino un C lietotāji, ar ko līdz šim esmu runājis, neko nopietnāku par trim rindiņām nav uzrakstījuši ASMā, es neko vairāk par dažām rindiņām neesmu uzrakstījis priekš AVR iekš C, līdz ar to nekāda saruna un salīdzināšana nesanāk. Eh - uz "beztēmu" velkošs palags sanāca...

----------


## ansius

nav tik traki M_J, man interesanti... tapēc ka esmu biku paņēmies ar AVR asm un ir priekšā viens projektiņš, motorizēta timelapse/video sliede ko vada Atmega128, idejiski var arduino, un tur jau +/- gatavi risinājumi pat ir, bet nu pētu kodu kā rakstīts un nepatīk, kaut kā viss liekas ka caur ne to atveri programētājiem tas nācis ārā... Piņķerīgs tas pasākums ir jo reāli jātaisa savs rtos, vai arī jāimanto gatavs, jo ir paralēli uzdevumi, pie kam daļa no tiem samērā precīzi laikā jāizpilda, kā piemēram ekspozīcijas ilgums. Es mēģinājis C lausies iekšā vairākas reizes - nu nezinu, kaut kā nepatīk.

----------


## Rigo

Es jau rakstīju, ka jautājums IR retorisks  :: 
Jo patiesībā nav pilnīgi nekādu atšķirību. Un kādēļ būt jāmigrē starp sistēmām? Arī lieki.
Nu OK. Pārfrāzēsim visu to teikto. Ja ņemam kādu konkrētu Arduino plati un tajā par piemēru ir Atmega328P. Savukārt otrā galda malā to pašu veidojam ar pliku Atmega32P. Un ņemam nevis Arduino IDE bet gan pliku GCC (kurš īstenībā ir Arduino IDE izmantotais toolčainis). Uztaisām vienu un to pašu projektiņu un kompilējam ar vienu un to pašu kompilatoru.
Vai tiešām vēl joprojām ir tik milzīgas atšķirības starp risinājumiem, lai būtu jāmigrē no Linux uz Windows vai arī jāatmet gatavie risinājumi? Atbilde ir: protams, ka nē.
Nepatīk formfaktors? Ņemam kādu no mikro platēm. Plus jau ir tur, ka ir iespējams pilnīgi bez nekādām raizēm, pa fikso samontēt to, ko tajā brīdī vajag. Ne jau vienmēr ir laika taisīt katram verķim platīti. Un ja verķis kļūst sarežģītāks, nekā to var piedzīt ar "duino" plati, tad diskusijai nav pamata. Jādarbojas ar plates dizainu.

Man te vienkārši bija tāds gadījums, ka 2 dienu laikā vajadzēja rūpnieciskai mašīnai izsviest esošo kotrolieri un šo mašīnu palaist darbam. Nebija nekādu domu par dizainēšanu, nedz displeja moduļu pasūtīšanu. Un tas projektiņš lieliski ietilpa 16kB-os. Un pini pietiek vēl lai SPI displeju pieliktu un tādējādi ieekonomēt vēl kādus eiro. Jo parasts, Hengstler skaitītājs (programmējams) maksā tik daudz, ka varu nopirkt daudzus tādus arduino un LCD moduļus.
Mašīna: SMD detaļu pakošanas iekārta; PLC (vecais) - GE Fanuc (ar beteriju pie dzīvības uzturošu SRAM). Protams, ka tā bija veca un proga bija ferloren. Tāpāc viss šis sirbors. Un sanāca. 2 dienas. Iekārta strādā stabili. Jebkurā brīdī pārprogrammējama neizārdot un elektronika ietilpa vecā, uz sliedes montējamā korpusiņā.

----------


## Rigo

Nu re! Nav nemaz tik atšķirīgi mums tie viedokļi. Ir tikai dažādas pieredzes un vajadzības. Galvenais lai nav FlameWar.

Par bootloader. Arī tas nav atkarīgs no Arduino. Jo visa pamatā jau ir vecais labais avrdude. Ar ko gribas, ar to iešuj un lai tikai avrdude saprot.

----------


## Powerons

Nu par Arduino un AVR
Man liekas ka, tas Arduino ir pārāk novienkāršots prieks iesācējiem, un ja gribi ko vairāk par dažu LED mirkšķināšanu super primitīvu PWM
tad ar arduino nekas nesanāks. Bet lieta tāda ka tas primitīvisms ir baigi aizgājis tautā un normāli programmēt neviens vairs negrib, bet ko nopietnāku ar arduino zināšanām nespēj. Piemēram pilnībā sava iekārta.

Drīzumā taisos pabeigt modbus slave draiveri priekš AVR (izcili vienkārš priekš lietotāja), kurš būs OpenSource, pa lielam jau strādā, tikai bija doma to portēt arī uz arduīno, bet tas tā tik vienkārši nesanāk, arduino normālos AVR reģistrus nesaprot  :: 

Par ASM uzskatu ka tā pa lielam ir pagātne, kuru jālieto tikai īpašos gadījumos, kad savādāk nevar. Citos gadījumos ASM lietošanu uzskatu par nelietderīgu laika tērēšanu.
Lai gan nomainīt dzimto programmēšanas valodu uz citu ir visai pagrūti, man kādreiz bija grūti pāriet no Pascal, uz C

----------


## Rigo

Man ir jautājums visiem. Kā Jūs programmējiet Arduino, lai tajā esošais Atmega "nesaprastu" kaut ko.? Vai tiešām paņemot projektam par pamatu Arduino, programmējiet izmantojot Arduino IDE un tās bibliotēkas?  Esmu programmējis šo Dev plati ar visu, kas atrasts tīklā un neesmu iedomājies, ka Atmega168P <> Atmega168P.

----------


## M_J

Es varbūt putrojos jēdzienos runājot par AVR un Arduino. Ar AVR saprotu pliku mikrokontrolieri, ar Arduino jau gatavu plati un AVR mikrokontrolieri uz tās ar kā minimums iešūtu bootloaderi + vēl IDE. Tāds, iespējams šķībs, priekštats man radies no tā, ka viens pazīstams cilvēks ir sācis nodarboties ar mikrokontrolieriem un dara to tieši, izmantojot Arduino. Par migrāciju starp platformām - to es vairāk par ASM un C. Lai pārietu uz C man jāatrisina viena problēma. Manas programmas pamatā ir saistītas ar motoru vadību. Pieņemsim, ka mums ir motors, kurš griežas ar 10000 apgr/min. Lai sinhronizētu aizdedzi un iešprici, tiek izmantoti signāli no spararata (smagākais gadījums, teiksim 135 impulsi/apgriezienā), sākumstāvoklis tiek noteikts vai nu no devēja, ko mēdz dēvēt par augšējā punkta devēju, bet impulss no tā parasti nesakrīt ar augšējo punktu nevienā no cilindriem, turklāt impulsi var būt vairāki, vai arī pēc zobu iztrūkuma spararata devējā, un tad vēl sadales vārpstas stāvokļa devējs. Tad vēl jāizrēķina un jārealizē aizdedzes un iešprices impulsi līdz 8 cilindros, tukšgaitas regulatora vai elektroniskā droseļvārsta vadība un virkne citu lietu. Lieki piebilst, ka praktiski visi Atmegas128 taimeru pārtraukumi tiek izmantoti. Un pārtraukumi ir lieta, kas jāapstrādā fiksi. Protams, pārtraukumā jāizdara tikai minimāli nepieciešamais, bet tāpat kaut kādi reģistri tam tiek izmantoti. Visu procesu šausmīgi sabremzē visu pārtraukumā izmantojamo reģistru satura saglabāšana pārtraukuma sākumā un atlikšana atpakaļ beigās. Tāpēc es savās programmās piemēram esmu nodalījis, kurus reģistrus izmantoju pārtraukumos, kurus galvenajā "loopā" un ne tikai to. Visā programmā sekoju reģistru izmantošanai, lai nebūtu lieka datu pārsūtīšana starp SRAMu un reģistriem. Var teikt, ka man ir stingra kārtība, kādiem nolūkiem, kādi reģistri tiek lietoti. Pie tā rūpīgi piestrādājot var ļoti būtiski palielināt programmas ātrdarbību. Assemblerī man ir visas iespējas to darīt. C es pagaidām tādas iespējas nesaskatu, lūdzu tie kas strādā C iebakstiet man ar pirkstu, kur tādas iespējas ir aprakstītas, loģiski spriežot vajadzētu būt, tikai es nemāku atrast, iesācēju pamācībās tādas lietas točna nav.

----------


## Rigo

Forši, ka vēl kāds tikai nemidžina "ledus"  :: 
Par jēdzieniem perfekti. Tā arī ir: AVR ir čips un Arduino ir plate ar čipu un programmu komplektu PC pusē. Pati IDE ir nu tā. Var pirmajos eksperimentos pietikt. Interesantākais tur ir bibliotēkas. Taču arī tām ir viena bēda - tās ir palēnas. Nu vismaz tie digitalWrite un digitalRead. Taču arī tā nav liela problēma - pilnīgi mierīgi var rakstīt C. Tas viss neizejot no tās IDE. Un pilnīgam "turbo" ir ASM. Jo patiesībā aiz IDE muguras slēpjas vecais, labais GCC.
Nepārprotiet, es nebūt neesmu Arduino fanāts un ledu midžinātājs. Man vienīgi patīk visu verķu universālums. Un ja nepieciešams, tad izmantojot no Arduino komplekta pašu dzelzi varu mierīgi un pašpārliecināti darboties ar ASM. Jo plate ar čipu ir tikai platīte. Un tas nekas, ja neesmu to pats kodinājis. Man ne vienmēr tam sanāk laika. Un īpaši, ja čips ir no eksotisko korpusu saimes.
Bet Jums pilnīga taisnība Atmega128 gadījumā - tāda Arduino saimē nav. Nāksies ņemt Arduino Mega 2560. Tam arī nav ne vainas.

----------


## Powerons

Par C priekš M_J
Tas gan nenosaka kurā CPU reģistrā ko likt, bet svarīga lieta ja izmanto jebkādus pārtraukumus.
Kad. man vienā programmā bija gļjuks, tad dabuju tam rakties cauri.

Nu piemēram:
volatile uint8_t UART_RX_BufferLength;

Mainīgajam priekšā vajag pierakstīt "volatile" tas nozīmē, kad mainīgais pirms izmantošanas tiek paņemts no atmiņas un ierakstīts CPU reģistrā.
Tas protams prasa papildus laiku, bet ja nav  "volatile" tad izpildot pārtraukumu pārtraukums maina mainīgā vērtību, bet pēc pārtaukuma tiek izmantota nevis faktiskā mainīgā vērtība, bet tā kas palikusi CPU reģistrā. Bez  "volatile" protams vis strādā ātrāk un ja nav pārtraukumu tad  "volatile" nevajag.

Vienkārši sakot  "volatile" konkrētam mainīgam atslēdz kompilatora optimizācij

Tas tā, ja kāds nezin šito C fiču tad var noderēt, man noderēja  ::

----------


## M_J

Es jau arī neesmu Arduino nīdējs un nemīlētājs. Galvenais, kas mani attur no Arduino lietošanas ir tas, ka lietoju ASMu bet neesmu C lietotājs. Līdz ar to varu izmantot Arduino tikai kā platīti, uz kuras uzlodēts AVR, bet ne pārējos labumus. Platītes jau labas, universālas, bet nelaime tā, ka esmu sataisījis savas platītes, tiesa ne tik universālas, kā Arduino, vairāk orientētas manām vajadzībām, dažādiem čipiem gan priekš tiny2313, gan atmega8, atmega16, atmega128 un lietoju tās. Man aktuālākais ir iemācīties apvienot iekš AVR C un ASM. Tieši apvienot, apmēram proporcijā 50/50 nevis lietot tikai C, iespraužot kodā pa dažām ASM rindiņām. Nedomāju, ka būtu grūti sākt rakstīt tikai C, īpaši neinteresējoties, kā kompilators izrīkojas ar dzelža resursiem, galu galā to daļu, kas strādā uz PC līdz šim rakstīju Delphi7, tagad Javā, bet C un Javai ir daudz kopīga. Tikai PC man ir pilnīgi vienaldzīgi kā tiek lietoti datora resursi, savukārt AVR es gribu to pilnībā kontrolēt. Nu labi, varbūt ne pilnībā. Varētu C rakstīt galveno "loopu", bet pārtraukumus atstāt ASMam. Un stingri pieteikt C kompilatoram: "reģistrus no r4 līdz r11 tu nedrīksti aiztikt! Tāpat no r20 līdz r23! Tie būs ASMam lietošanai pārtraukumos! ASMs tev mīļi atstāj visus pārējos un uz tiem nepretendēs! Tiec galā, kā gribi, bet šitos neaiztiec! Ja nevari, bļauj, meklēsim kompromisu! Un atmiņu no tādas līdz tādai adresei es tev aizliedzu izmantot, to es lietošu ASMa daļā! Un tajās adresēs tu saliec priekš manis to, šito, un vēl šito lielumu, savukārt šitajā, tajā, tajā un vēl tajā adresē es tev nodošu to, šito un vēl šito." Ja es ar C kompilatoru tā varētu sarunāt, tad tā lieta ietu.

----------


## Rigo

Neesmu vēl mēģinājis apvienot C ar ASM šajos "mazajos" zvēriņos, taču atceroties to, kā tas bija senāk, kad niekojos ar PC zema līmeņa programmēšanu, tad nekā traka nebija. Koda daļas (dažas C un dažas ASM) tiek kompilētas par OBJ failiem, vai kodiem (kā kurš nu sauc) un pēc tam to visu linko kopā un pielinko vajadzīgās bibiliotēkas, ja tādas izmantotas. Galvenais ir izpētīt, ka tiek nodoti parametri un atgrieztas funkciju vērtības. Pārsvarā caur steku bet mēdz būt arī caur reģistriem. Kā nu kurā valodā.

Jāpapēta, ja sanāksies laiks. Noderīga lieta jau tomēr.

P.S. Reiz būvējot vienu pasūtījuma softiņu, uzrakstīju savu bibliotēku, kura bija izmantojama no MASM, Pascal, C, Qbasic un vēl Clipper ar FoxPro piedevām. Pārsvarā tikai lai izmēģinātu roku.

----------


## next

> Sveicināti,
> 
> un vispār iedomāties kādu darbu, ko dara mcu, variet?
> 
> Pretjautājums. Kam domāts displejs?


 Bet tas tak grafisks ekraans.
Ja es taadu interfeisu gribeeshu pieriikot savam vidusmeera projektinjam tad nepiecieshamo resursu apjoms vismaz divkaarshosies.
Joprojaam gaidu piemeerus kad taadu noteikti vajag.

----------


## next

> Protams, pārtraukumā jāizdara tikai minimāli nepieciešamais, bet tāpat kaut kādi reģistri tam tiek izmantoti. Visu procesu šausmīgi sabremzē visu pārtraukumā izmantojamo reģistru satura saglabāšana pārtraukuma sākumā un atlikšana atpakaļ beigās.


 Naakoshais solis - paartraukumaa izmantot tikai taas instrukcijas kas fona procesa kontekstu nemaina.
Tad nebuus jaasaglabaa un jaatjauno.
Ir bijushi gadiijumi kad esmu taa dariijis  ::

----------


## Rigo

Šijā postā nekam nebija jābūt.

----------


## next

> Protams, tagad ir stilīgi visam tam izmatot telefonu/planšeti un tādā garā, bet ir vietas, kur tas 100 gadus nav vajadzīgs.


 Es kaareiz pashlaik apdomaaju verkji kam viss interfeiss sastaavees no viena LEDa un manaa pusee smartfons ar uzinstaleetu aplikaaciju "text to morse".

----------

