Sida 1 av 2
Pic12f675... ADCON
Postat: 28 december 2006, 19:25:10
av newbadboy
Har startat denna tråden redan en gång. Men jag kan banne mig inte hitta den.
Det är iaf problem med att jag inte får rätt på en krets. Om jag har en etta på input så är output ändå noll. Jag är dessvärre inte helt hundra på hur man stänger av A/D'n. Har bortkommenterat delay för att jag inledningvis bara vill få rätt ingångarna dvs Input=1 => Output=1.
#define Input GPIO.F1 //GPIO döps om för tydligare kod
#define Output GPIO.F2
#define Reset GPIO.F0 //Blir en ingång som nollar programmet
void main(){
ADCON0.F0 = 0x00; // A/D av
CMCON = 0x07; // Komparator av
TRISIO.F2 = 0; // utgång
TRISIO.F1 = 1; //IN
ANSEL.F2 = 0; // Digital
ANSEL.F1 = 0; // Digital
ANSEL.F0 = 0; // Digital
while(1){
Output = 0; //säkerställer att utgång alltid är noll
if (Input){
// delay_ms(6000); //vänta 6sek innan larm
Output = 1;
// delay_ms(10000); //larma i 10sek
}
}
}
Postat: 28 december 2006, 20:17:53
av newbadboy
Det verkar funka nu... ser ut som det berodde på kontaktfel
Postat: 28 december 2006, 21:20:53
av JimmyAndersson
Att tråden försvann berodde på att vi nu ser forumet som ligger på den nya servern. Tyvärr är det en gammal backup som återställts, så därför saknas många trådar. Det står visserligen lite här och var att man inte skulle skriva något tills innan allt var klart.
Kul att det fungerar iallafall.
Men... kontaktfel? Är inte det en av de första grejjer man kollar när det är något som inte fungerar?

Postat: 28 december 2006, 22:23:31
av sodjan
> Jimmyandersson gav mig förslaget med ANSEL mn det hjälpte tyvärr inte.
Spelar ingen roll, det var hur som helst ett fel i din kod.
Att du kanske har haft *andra* fel också ändrar ingenting...
Postat: 29 december 2006, 10:32:03
av newbadboy
Det har du rätt i chefen!!!, det var fel i koden men oxå kontaktfel.
Postat: 30 december 2006, 11:08:52
av newbadboy
Nästa fråga.
Jag vill internt koppla MCLR så jag slipper ett extra motstånd. Ser i databladet att en nolla ger detta. Men hur är syntaxen för detta har provat bla CONFIG.F5=0 men det gick inte bra.
samma har jag gällande den interan oscillatorn. Ser i databladet att man ska ange 100 men jag förstår inte riktigt hur man exakt skall skriva detta.
Postat: 30 december 2006, 13:19:50
av sodjan
Internal MCLR (och mycket annat) styrs av CONFIG bitarna.
Kolla databladet tillsammans med dokumentationen för
verktyget du använder !!
Du kan *INTE* sätta CONFIG bitarna i din kod.
Antingen i någon meny i verktyget, eller med
ett direktiv.
Se också till att du är fullt medveten av konsekvenserna
av att disabla MCLR !!
Postat: 30 december 2006, 15:26:15
av pheer
Om du använder den interna oscillatorn kan du få problem att programmera kretsen om du samtidigt använder intern mclr.
Postat: 30 december 2006, 16:12:00
av JimmyAndersson
"Se också till att du är fullt medveten av konsekvenserna
av att disabla MCLR !!"
Det tål att upprepas.
Själv kör jag *alltid* med extern MCLR.
När det gäller interna oscillatorn:
Gå in i menyn Projects -> Edit -> Device Flags och kryssa för "INTRC_OSC_NOCLKOUT".
MCLRE_ON ska vara ikryssad om du kör med *extern* MCLR. Det är lite dumt att MikroC/Basic använder den lösningen eftersom inställningarna kan försvinna om man har otur/är slarvig/har buggig mjukvara, men om man har koll på det (och särskillt då hur MCLRE är ställd) så fungerar det ganska bra. Personligen skulle jag visserligen hellre ha det i en fil som är lite mer synlig, men man kan inte få allt.

Postat: 30 december 2006, 16:27:09
av sodjan
Har man alltså inte *alls* möjlighet att lägga in CONFIG inställningarna
som ett direktiv (eller liknande) direkt i källkoden !?
Postat: 30 december 2006, 16:43:17
av JimmyAndersson
Det finns tydligen:
(MikroC kör ju med samma "skal" så det är likadant där.)
"mikroBasic has several predefined flags for configuring hardware. These can be found in definition files (defs folder), specifying hardware settings for individual chips. SFR are sorted under categories: ___SFR (umbrella for all registers), ___CONFIG_OSC (oscillator), ___CONFIG_WDT (Watchdog timer), and ___CONFIG_BORPOR (brownout reset and powerontimer)."
Men det är allt som står om detta, åtminstone i hjälpfilen. Jag har inte fått det att fungera särskillt bra och har inte heller sett någon källkod som använder sig av detta. Läser man vidare i hjälpfilen så verkar det som att Mikroelektronika hellre pratar om ändringarna i menyn. Så, visst, möjligheten finns, men den verkar inte vara särskillt utvecklad. Frågan är även om det är inställningarna i källkoden eller i menyn som "gäller".
Postat: 30 december 2006, 18:13:41
av newbadboy
Ljuvligt, det var eg oscillatorn som jag helst ville köra intern i detta fallet. Lugnar mig nog med intern mclr tills jag läst på lite mer.
När jag har MCLR och den andra ikryssad fungerar inte min krets längre. Vad kan jag kolla upp?
Postat: 30 december 2006, 18:40:05
av sodjan
> det var eg oscillatorn som jag helst ville köra intern i detta fallet.
Ja, det spar ju två pinnar som kan användas som I/O.
Det är nog absolut vanligast att man för 12F-serien med intosc
p.g.a av detta.
> Lugnar mig nog med intern mclr tills jag läst på lite mer.
Dessutom är det ju bara en pinne. Och som enbart kan vara ingång så
igentligen är det bara en halv pinne...
> När jag har MCLR och den andra ikryssad
OK. Vad står det där du har "kryssat" ?
Och vad är "den andra" ????
D.v.s vad är det *igentligen* du har valt ?
Postat: 30 december 2006, 18:47:21
av newbadboy
Jag gick in i editorn som jimmy angav. Bockade för INTRC_OSC_NOCLKOUT och MCLRE_ON precis som skrev. Med dessa inställningar funkar inte kretsen. Som default är MCLRE_ON inte förbockad. Provade därför att ha end INTRC_OSC_NOCLKOUT förbockad men det hjälpte heller inte.
Postat: 30 december 2006, 18:53:00
av sodjan
OK.
Hur körde du när det *fungerade* ?