Fórum témák
» Több friss téma |
MCLR fel van húzva Vdd-re? A pickit felhúzza magának.
Köszönöm, igen, így működik. Persze nem értem, mert eddig ezt sosem csináltam és mégis korábban ment a dolog e nélkül is.
A programot MicroC-ben írtam, ott nincs értelme debug módot használni, az MPLAB-ban meg csak letöltöm, ott nem buildelek.
Ha kikapcsolod a MCLR-t akkor lehet, hogy működik most is, de egy kis zavar és resetel, nem jó lógva hagyni.
Köszönöm, működik!
Minimális átalakítással meg lehet oldani a vezérlés 4 bitesre átalakítást vagy alapjaiban kéne ahhoz átírni a programot?
Mi a minimális?
Nem néztem át csak belepillantottam a kódba és úgy néz ki az LCD_INIT és az LCDCMD rutint kell átírni. Nem vészes.
Mi a véleményetek az olcsóbb eredetinek kinéző pickit 3 klónokról? Pl ez:Bővebben: Link
Chipcadnál majdnem dupla ennyibe kerül, gondoltam spórolok egy kicsit, ha funkcionálisan nem butított változatról van szó, persze a kínai odaír mindent.
Nagyon eredetinek néz ki. Ha az akkor valami elveszett kamionról van
Ha meg hamisítvány akkor elég gáz mert rajta van a mikor csíp logója, ezért gyanús, hogy az első teória a helytálló. Már ha egyáltalán azt kapod ami a képen van. A hozzászólás módosítva: Ápr 29, 2014
Egy kicsit tudnád részletezni milyen csatoló fokozat? Esetleg egy kapcsolási rajz skicc is sokat segítene.
Sziasztok! Van egy kis gondom a Timer1 megszakítással. PIC18F2550-et programozok 20Mhz-es külső quartz-cal és a Timer1-nek egy 32.768Hz-essel. Nem használok low/high megszakítás beállítást. A fordító XC8 v1.31. A portok inicializálva vannak, a végtelen ciklusom üres és előtt engedélyeztem a globális megszakítást és elindítottam a Timer1-et. Egyszer meghívódik az ISR aztán többet nem, emellett ha MCLR-rel újraindítom, elszáll a következővel: PC=0x0018. Stack overflow for push of address 0x00000018 (STKFUL set). Mi lehet a probléma?
- RCON 7. bitje 0, nem prioritásos megszakítás: INTCON.7 : GIE, INTCON.6 : PEIE
- INTCON = 0x40; Csak a PEIE áll 1 -re a GIE nem. - Az inicializáló rész végén levő kivételével töröld a programból a GIE -t állító sorokat.
Ezeket mindet értem (legalábbis azt hiszem). Itt a teljes kód, csak a configot hagytam ki.
A TMR1IF sose billen be, ha az interrupt "if" részéből kiveszem ezt a feltételt, akkor ha MCLR-rel újraindítom, elkezd működni(LATA0), de csak a reset után. Ugyanez érvényes a GIE és PEIE-re. Ha kiveszem a PEIE feltételt, GIE == 0-ra írom és reset-elem, akkor elkezd villogni a LED-em (LATC7). Ha a GIE-t veszem ki és a PEIE == 1, akkor egy reset után elkezd villogni(LATC7). Szóval reset után belép az ISR-be és minden flag törlés nélkül működik. Az Errata-t is olvasgattam, amit ajánlottak a TMR1-hez ki is próbáltam, de semmi.
Ha jol tevedek a GIE bit az interrupt alatt '0' szintu, tehet az IT rutin ezen resze sohan nem fog teljesulni:
Így próbáltam, de nekem így nem működik:
#include inc.inc így viszont működik: #include <inc.inc>
A project tulajdonságainál módosítani lehet a könyvtárat, ahol az inc állományokat keresi a fordító.
Ha a fordító könyvtárában van, akkor a <> jelek használatosak. A "inc.inc" a munkakönyvtárban keres elsőre. Megadható akár teljes útvonal is, pl.: "c://valahol/valami/akarmi/inc.inc" -is.
Idézet: „Így próbáltam, de nekem így nem működik: #include inc.inc” A fájlnév köré idézőjel vagy hegyes (kacsacsőrös) zárójel kell!
Srácok egy buta kérdés:
P18F4550 és 25LC640 párost használok. A kérdés pedig az, hogy, ha a memóriába csak 1bájtot lehet egyszerre írni akkor ha egy short int változóba lévő mondjuk 500-as értéket hogyan tudok bele írni? Mert ugye ez már 2bájt helyet foglal.. Előre is köszi a kiokosítást..
És ha sort int változom értéke 900 akkor meg 4részre kell bontanom?
Nem lenne túl hatékony nem? Tudom, hogy 1bájt (unsigned) 0-255 és 2bájt 0-65536, de a 2részre bontást nem értem, hogy érted.. A hozzászólás módosítva: Máj 3, 2014
A short int változó értéke nem lehet 500, vagy 900. Az már fordítási hibát, vagy futási hibát okoz. Ilyenkor a változó típusát meg kell változtatni.
A hozzászólás módosítva: Máj 3, 2014
32767 -ig a short -ot, 65365 -ig az unsigned short -ot nem kell csak két részre bontani, négy részre majd a long -ot vagy az unsigned long -ot kell. Bővebben: Link
Érdemes egy union -t definiálni, mint állandóan osztogatni, szorozgatni.
A hozzászólás módosítva: Máj 3, 2014
Hát nem úgy van, hogy unsigned char 8bit, short int 16bit, unsigned int 32bit?
Nem szóltam, sajnos nem olvastam kellő figyelemmel.
Kaphatnék némi használati magyarázatot ehhez a típus definicióhoz?
Hogy működik? Az látom, hogy 16bites, de hogy adod meg neki a 2bájtos adatod? Így valahogy:
De hogyan írom ezt be? Előbb az LB-ét és utána a HB-ét íratom a memóriába...? Amikor kiolvasom akkor már egyben lesz vagy ott is kell majd valami átváltó? Kérlek magyarázd el a működését, mert sajna nem értem...
Mondjuk maradjunk a példádnál. 25LC640 -be szeretnéd a temp változó értékét (900) beírni. Az SPI kezelő függvényeket már megírtnak tekintem.
Változót kell deklarálni: WORD_VAL temp; EEProm -ba írás:
Most vissza szeretnéd olvasni:
Értem most már...
Az adatstruktúrát használni kell be és kiírásnál is, hogy a megfelelő értéket írja és olvassa vissza. (összerakja a 2bájtot, 2x8bit-et) Még egy része nem teljesen tiszta. Van egy bits adatstruktúra is. Az mit csinál? A 16bitet külön válasza 16 külön álló bit-re? Gyakorlatilag ez a bits struktúra fogja átváltani, tárolni bináris formában a 900-at? (0000 1001 0000 0000) A hozzászólás módosítva: Máj 3, 2014
|
Bejelentkezés
Hirdetés |