Lehet rossz helyen tapogatózok, de egy kérdésem lenne: hogy tudok egy Arduino-ban megírt programot átkonvertálni egy PIC12F629 esetleg 12F683 részére alkalmas formátumba? Ha valaki tudna ebben segíteni, nagyon hálás lennék. Előre is köszönöm! Szabolcs
Van egy PIC32MZ2048EFH144 -es mikrovezérlőm. Ezt a típust lehet assembly nyelven programozni? Mert eddig MPLAB X IDE -hez csak C nyelvü compilert találtam (XC32 elvileg tudd assemblyt is de eddig még nem sikerült ezért kérek segítséget).
Hogyan lehet ezt a típust assemblyben programozni?
Kaptam karácsonyra egy RaspberryPi-t, és ezzel fejest ugrottam az electrical architecturingbe. Megtetszettek a mikrokontrollerek is, és szeretnék megtanulni PIC-ezni is. A Pi-nek úgy vágtam neki, hogy csak nagyon alap Java tudásom volt, menet közben tanultam meg a Pythont meg hogy hogy kell a gpio-t kezelni. Valahogy ilyen "learn by doing" módszerrel gondoltam a picekkel is. Szerintetek összejöhet ez nulla c ismerettel, vagy először inkább tudjak rendesen programozni? :D
Meg a technikai dolgok: milyen mikrokontrollert ajánlanátok? Olyat szeretnék, aminek aránylag sok lába van. (Próbaképp kértem termékmintát a Microchiptől, így most van egy PIC18F4550-I/P és egy PIC18LF2550-I/SP a fiókban, de elvileg tudok még kérni.) Programozáshoz meg jó lesz egy ilyesmi (kezdetnek legalábbis): http://ebay.com/itm/400813231659?nav=SEARCH
Azt tervezem, hogy majd ha majd már tényleg értek ezekhez, SPI-n összekötöm a Raspberryvel, és mindenféle szenzort aggatok rá. (A Pi meg majd egy LED szalagot vezérel a szenzorok adatai alapján.)
Remélem, hogy azóta már rájöttél a megoldásra, de azért leírom, hátha más is idetéved...
A main() függvény a C nyelv belépési függvénye, ezt keresi és ennek adja át a vezérlést. A programod lefutott és mivel találkozott a main fv. '}' jelével, ezért újraindult ( ide nem lett volna szabad kerülnie ! )!
Megoldás: előtte egy végtelen ciklus ( erre utaltak korábban is ! ) vagy egy hurok ! Végtelen ciklus pl. "while(1);" -el, hurok pl. "do...while"-al alakítható ki!
Minden ki van kapcsolva ami kell de közben megtaláltam a megoldást. Egy feltételhez kötöttem (pl nyomógomb lenyomás) és Úgy gond nélkül megcsinálja.
Közben arra is rájöttem hogy PIC-nél legalábbis azon a szinten ahol én vagyok (értsd egyszerűbb programok) nem használjuk a return utasítást mert a programnak folyamatosan futni kell.
Még valami: a WDT biztos nincs engedélyezve? Az újraindítgathatja.
Kipróbálhatnál egy ilyet:
{ int x,y=0; TRISB=0; // PORTB osszes láb (0)= mint kimenet// OSCCON=0x76; //OSCCON regiszter beéllítása belso oscillátorra//
ClrF WDTCON
while(y<3) { LATB=0x0000; //kimenet alacsonyan van for(x=0; x<5; x++) __delay_ms(50); //led nem világít LATB=0x00FF; //kimenet magason van for(x=0; x<10; x++) __delay_ms(50); //led világít y++; }
aaa ClrWDT
Goto aaa
}
A dőlteket ASM-ben írtam, nem tudom, C-ben hogy kell. Szóval ez biztos megállítaná a három villogás után, bekapcsolt WDT-vel is. (ha csak az 50 ms a villogásnál nem sok már a WDT-nek, mert akkor resetel mindenképp)
De hogy biztos legyen, baraktam a WDT kikapcsolását (ClrF WDTCON) is az elejébe.
És az a Return hova juttatja vissza? Ez a kis programocska szubrutinként van hívva? Mert ha nem, akkor egy stack underflow-val ugyanott vagyunk, hogy újra és újra lefut.
Igaz egy ( return 0; ) utasítás még mehetne az utolsó zárójel elé amivel kilépek, de próbáltam Úgy sem azt csinálja amit szeretnék. De az észrevétel jó volt kösz.
Nem értek a C-hez, de nem kellene a ciklus után valami megállás? (cimke Goto cimke)
Mert ha ez ASM program lenne, és csak ennyi, amit látunk, akkor a ciklus után végigtekerne a teljes programmemórián, és kezdené előről. Annyit lehetne csak észlelni, hogy a három villanás után talán kicsit nagyobb a szünet, aztán megint a három (bár ez procifreki-függő).
Sziasztok ez az első beírásom mindjárt lenne egy kérdésem. PIC 18F2220 tip. eszközt programozok. Kezdő vagyok bár a kötelező körökön már túl vagyok, mivel épp a Kandóra-járok. Bár a programozás ezen részénél még nem tartunk gondoltam jobb ha elébe megyek a dolgoknak. A problémám a következő:
8 db LED-et villogtatok (mint minden kezdő) de én azt szeretném hogy csak annyiszor villanjon fel ahányszor én szeretném nem folyamatosan.Mellékelnék egy programot amit írtam hálás lennék ha valaki rávilágítana a problémára. Amúgy Proteus 8-on futtatom.
A tervem az, hogy az analóg bemenetén ráteszek 8-10-12, egyenként 3-6 sec hosszú hangot (effektek, esetleg beszédhang), majd PIC-kel vezérelve, SPI-buszon keresztül szólaltatom meg a programfutásnak megfelelőt. Ehhez az utasításkészlete megvan (7 bájtot kell kihajtani SPI-n, sebaj), de itt meg kell adni a kezdő és végcímeket.
A kérdésem az, hogy ezeket a címeket hogyan tudom megállapítani? Egyenként felvéve a hangokat, mindegyik után kiolvasom a pointereket, lejegyzem (eltárolom), vagy valamilyen egyszerűbb módszer is van a "véletlenszerű" elérésükre? Tehát a lényeg az lenne, hogy nem egymás után, hanem eseményfüggő hengbemondásom legyen az ISD-ből. Tehát ha x esemény bekövetkezik, akkor (pl.) a negyedik felvételt, ha y esemény, akkor a hetedik felvételt játssza le, és csak azt (de az elejétől a végéig).
Szép darab, én is azt néztem, hogy gyakorlatilag minden bemenetet lehet "billegtetni" és minden kimenet kijelezhető. Én egy sokkal primitívebbet csináltam magamnak, nem lett volna türelmem egy ilyen "összkomfortoshoz". Az, hogy még egy "breadboard" is van rajta, már csak hab a tortán :-)))...