Två analoga ingångar på 16F690
Två analoga ingångar på 16F690
Jag kör Picbasic och försöker läsa in ADCIN från porta.0 och porta.1 på en 16f690
Lyckas inte riktigt med att konfigurera ingångarna. Kan läsa analogt från porta.0 men inte från porta.1.
Behöver man ställa ADCON ANSEL och liknande i Picbasic eller ställer ADCIN in allt detta?
Tack från en nybörjare
Lyckas inte riktigt med att konfigurera ingångarna. Kan läsa analogt från porta.0 men inte från porta.1.
Behöver man ställa ADCON ANSEL och liknande i Picbasic eller ställer ADCIN in allt detta?
Tack från en nybörjare
Ja du, där har vi en av de saker som får mig att [IRONI] "gilla" [/IRONI] högnivåspråk till nybörjare.
Saken är att du använder en funktion utan att veta vad den gör! För mig (med en del programmeringsår på nacken) är detta totalt förkasteligt, jag vill alltså därför rekommendera dig att byta till assembler!
Ett alternativ, om du MÅSTE ha högnivåspråk, att byta från BASIC till precis vad fan som helst utom BASIC, jag vill föreslå C men mest assembler.
Du har hamnat i "fällan": det går snabbt och enkelt, till och med så enkelt att du inte vet vad du gör, detta kommer att bli en belastning senare och BASIC är alltid en belastning!
Men insisterar du att använda detta språk och denna kommando kan jag bara rekommendera att läsa manualen och då inrikta dig på "ADCIN"-kommandon, där måste det stå.
Ta det inte personligt, jag kommer inte och hälsar på med knölpåken men detta inlägg är typisk för "snabbt och enkelt" programmering. Jag tycker att det kan vara helt OK att använda dessa kommandon och språk >när man väl vet vad de gör<, fram till dess ska man undvika dom.
Och BASIC är alltid fel!
Saken är att du använder en funktion utan att veta vad den gör! För mig (med en del programmeringsår på nacken) är detta totalt förkasteligt, jag vill alltså därför rekommendera dig att byta till assembler!
Ett alternativ, om du MÅSTE ha högnivåspråk, att byta från BASIC till precis vad fan som helst utom BASIC, jag vill föreslå C men mest assembler.
Du har hamnat i "fällan": det går snabbt och enkelt, till och med så enkelt att du inte vet vad du gör, detta kommer att bli en belastning senare och BASIC är alltid en belastning!
Men insisterar du att använda detta språk och denna kommando kan jag bara rekommendera att läsa manualen och då inrikta dig på "ADCIN"-kommandon, där måste det stå.
Ta det inte personligt, jag kommer inte och hälsar på med knölpåken men detta inlägg är typisk för "snabbt och enkelt" programmering. Jag tycker att det kan vara helt OK att använda dessa kommandon och språk >när man väl vet vad de gör<, fram till dess ska man undvika dom.
Och BASIC är alltid fel!
Tack för svaret, jag är dålig på programmering och borde lära mig assembler, men jag har inte tid. Försökte lära mig mer om vad ADCIN gör på http://www.tigoe.net/pcomp/examples/pic-adc-pbpro.shtml där man går ner på lägre nivå. Översatte självklart så gott jag kunde till 16f690:s registervärden.
lyckas ta in en analog avläsning från porta.1 men den verkar hänga ihop med signalen på porta.0. Kan inte få ett lägre värde på a1 än a0; a1:s värde är lika med eller högre än a0.
Får läsa vidare...
lyckas ta in en analog avläsning från porta.1 men den verkar hänga ihop med signalen på porta.0. Kan inte få ett lägre värde på a1 än a0; a1:s värde är lika med eller högre än a0.
Får läsa vidare...
- JimmyAndersson
- Inlägg: 26586
- Blev medlem: 6 augusti 2005, 21:23:33
- Ort: Oskarshamn (En bit utanför)
- Kontakt:
Icecap:
"byta från BASIC till precis vad fan som helst utom BASIC"
(Tyckte bara att det lät så kul.)
Men jag måste passa på att fråga vad du (och andra) gillar med C ?
Det är ju också ett högnivåspråk, visserligen inte lika "högt" som Basic. Men jämför man MikroBasic med MikroC så hittar man ju t.ex delay_ms() och liknande instruktioner i båda fallen, dvs instruktioner där man egentligen inte vet vad som händer när de görs om till lågnivåspråk. Görs C-kod om till "snyggare" lågnivåspråk än Basic?
"byta från BASIC till precis vad fan som helst utom BASIC"

Men jag måste passa på att fråga vad du (och andra) gillar med C ?
Det är ju också ett högnivåspråk, visserligen inte lika "högt" som Basic. Men jämför man MikroBasic med MikroC så hittar man ju t.ex delay_ms() och liknande instruktioner i båda fallen, dvs instruktioner där man egentligen inte vet vad som händer när de görs om till lågnivåspråk. Görs C-kod om till "snyggare" lågnivåspråk än Basic?
Tid är ett måste när man håller på med programmering. Räknar du med en timmes programmering så skriv 4 i timförslaget.
Assembler är inte alls svårt som skrivits i 10 trådar innan denna. Basic är ondska. Se bara på JimmyA för ledsen och nerbruten numera glad assemblerprogrammerare!
Sök på assembler eller pic och du skall finna. Bla jag har gjort ett lämpligt nybörjarprojekt. Detta plus att alla kommandon str beskrivna som assembler i databladet. Finns också en fin listning av alla kommandon mot slutet av manualen.
Assembler är inte alls svårt som skrivits i 10 trådar innan denna. Basic är ondska. Se bara på JimmyA för ledsen och nerbruten numera glad assemblerprogrammerare!

Sök på assembler eller pic och du skall finna. Bla jag har gjort ett lämpligt nybörjarprojekt. Detta plus att alla kommandon str beskrivna som assembler i databladet. Finns också en fin listning av alla kommandon mot slutet av manualen.
- Schnegelwerfer
- Inlägg: 1863
- Blev medlem: 8 november 2004, 13:46:56
delay_ms() finns inte i något av Cs standardlib, det är bara en egenskriven biblioteksfunktion som kommer med MikroC.JimmyAndersson skrev: Men jag måste passa på att fråga vad du (och andra) gillar med C ?
Det är ju också ett högnivåspråk, visserligen inte lika "högt" som Basic. Men jämför man MikroBasic med MikroC så hittar man ju t.ex delay_ms() och liknande instruktioner i båda fallen, dvs instruktioner där man egentligen inte vet vad som händer när de görs om till lågnivåspråk. Görs C-kod om till "snyggare" lågnivåspråk än Basic?
I C har du väldigt bra kontroll över hårdvarunära operationer, hur variabler lagras i RAM m.m.
Det här är en bra sida för assembler: http://www.piclist.com. Titta på "Source Code Library". En del program är väldigt svåra att förstå (som vissa matte-grejer och BCD-konvertering), men det finns andra saker som är lättare. Särskilt dom med kommentarer i programmet.
Om man höjer blicket något (över mikrokontroller-horisonten), så är
mitt intryck att många BASIC's är "över-förenklade". D.v.a att man försöker
få med färdiga funktioner på så hörg nivå att själva implementeringen
försvinner i sammanhanget. C å andra sidan är mer "tekniskt", d.v.s att
det förväntas att en C-programmerare är mer tekniskt bevandrad än
motsvarande BASIC-programmerare.
Detta behöver inte vara något fel eller problem, och det är det inte heller
så länge man kör på plattformar där ofullkommligheter i den underliggande
implementeringen döljs av att hårdvaran är "tillräckligt" snabb, som på
t.ex dagens PC och liknande maskiner.
På mikrokontrollers däremot, så uppstår det ganska snart lägen där det
visar sig att de klumpiga rutiner som BASIC levereras med ofta inte
fungerar riktigt bra. Visst, men kan (som jag tror att JimmyA upptäckte)
använda BASIC som ett "skal" och sedan köra alla PIC-register själv
och strunta i alla inbyggda funktioner. Men då ligger man inte långt
från att skriva assembler "på riktigt" i alla fall...
Sen kan man välja att köra "strukturerad assembler" (d.v.s C) om man
vill det...
Sen, till rbrakhya vill jag bara säga att, att komma med "...men jag har
inte tid..." är ett garanterat sätt att se till att man inte får hjälp. Varför
i helvete skulle *någon annan* ha (gratis) tid när inte du har det ???
mitt intryck att många BASIC's är "över-förenklade". D.v.a att man försöker
få med färdiga funktioner på så hörg nivå att själva implementeringen
försvinner i sammanhanget. C å andra sidan är mer "tekniskt", d.v.s att
det förväntas att en C-programmerare är mer tekniskt bevandrad än
motsvarande BASIC-programmerare.
Detta behöver inte vara något fel eller problem, och det är det inte heller
så länge man kör på plattformar där ofullkommligheter i den underliggande
implementeringen döljs av att hårdvaran är "tillräckligt" snabb, som på
t.ex dagens PC och liknande maskiner.
På mikrokontrollers däremot, så uppstår det ganska snart lägen där det
visar sig att de klumpiga rutiner som BASIC levereras med ofta inte
fungerar riktigt bra. Visst, men kan (som jag tror att JimmyA upptäckte)
använda BASIC som ett "skal" och sedan köra alla PIC-register själv
och strunta i alla inbyggda funktioner. Men då ligger man inte långt
från att skriva assembler "på riktigt" i alla fall...

Sen kan man välja att köra "strukturerad assembler" (d.v.s C) om man
vill det...

Sen, till rbrakhya vill jag bara säga att, att komma med "...men jag har
inte tid..." är ett garanterat sätt att se till att man inte får hjälp. Varför
i helvete skulle *någon annan* ha (gratis) tid när inte du har det ???
Och jag har inte tid att hjälpa alla som tror att de kan klara sig *utan* att *LÄRA SIG* Picbasic.
Varför måste du alls fråga om ADCIN om det nu är så enkelt ??
> Behöver man ställa ADCON ANSEL och liknande i Picbasic eller ställer ADCIN in allt detta?
Manualen är fullkomligt solklar på denna punkt. RTFM.
Du kan *omöjligen* ha kollat dokumentationen innan du frågade...
EDIT: Bara så du inte behöver leta själv...
http://www.melabs.com/resources/pbpmanual/
http://www.melabs.com/resources/pbpmanu ... 5_3.htm#52
Varför måste du alls fråga om ADCIN om det nu är så enkelt ??
> Behöver man ställa ADCON ANSEL och liknande i Picbasic eller ställer ADCIN in allt detta?
Manualen är fullkomligt solklar på denna punkt. RTFM.
Du kan *omöjligen* ha kollat dokumentationen innan du frågade...
EDIT: Bara så du inte behöver leta själv...
http://www.melabs.com/resources/pbpmanual/
http://www.melabs.com/resources/pbpmanu ... 5_3.htm#52
Before ADCIN can be used, the appropriate TRIS register must be set to make the desired pins inputs.
ADCON1 also needs to be set to assign the desired pins to analog inputs and in some cases to set the result format and clock source.
See the Microchip data sheets for more information on these registers and how to set them for the specific device.
Senast redigerad av sodjan 20 juni 2007, 14:48:39, redigerad totalt 2 gånger.
Men om du inte kommer i mål med BASIC..... hur har du då tid med det?
BASIC var det på den första dator jag köpte.... ganska snabbt visade det sin oanvändbarhet vid att strula till det och ja, jag är en "teknisk" programmör, jag utgår ifrån vad µC'n gör och hur den jobbar och sedan gör jag program som passar in i det.
Jag byggde ut min dåvarande dator till en CP/M-80 2,2 maskin och då plötsligt kunde jag JOBBA på den, program (asm Z80) var möjliga att göra som jag ville ha dom och de kunde köra "full fart", efter ett tag köpte jag en Pascal till den och då skenade produktiviteten, bytte sedan till PC och "hittade" en Borland C++ 3,0 varefter jag var frälst!
Om du vill göra en "Wait_ms(...)" är det väl bara att programmera den, jag har inte gjort det, delvis för att det är dålig programmeringsstil att stoppa en lång process med att vänta och dels för att jag gör interruptdrivna timers till sådana saker.
Jag har å andra sidan färdiga rutiner (i form av *.h-filer) med LCD-styrning, RTC, I²C, EEPROM, SPI-kommunikation, UART kommunikation (interruptstyrd) och en del annat. Jag använder en gemensam fil med nödvändiga definitioner till att se till att ett kommerciellt produkt och det PC-program man kan använda till detta produkt kan kommunicera, detta då produktens program är gjort i C och PC-programmet i Borland C Builder 6, då kan de använda en gemensam referensfil.
Produkten kan i övrigt stanna helt av i main-loop'en och fortfarande fungera då all styrning sker i interrupt.
Skulle jag ha gjort allt detta i BASIC hade jag nog fortfarande suttit och debuggad.....
BASIC var det på den första dator jag köpte.... ganska snabbt visade det sin oanvändbarhet vid att strula till det och ja, jag är en "teknisk" programmör, jag utgår ifrån vad µC'n gör och hur den jobbar och sedan gör jag program som passar in i det.
Jag byggde ut min dåvarande dator till en CP/M-80 2,2 maskin och då plötsligt kunde jag JOBBA på den, program (asm Z80) var möjliga att göra som jag ville ha dom och de kunde köra "full fart", efter ett tag köpte jag en Pascal till den och då skenade produktiviteten, bytte sedan till PC och "hittade" en Borland C++ 3,0 varefter jag var frälst!
Om du vill göra en "Wait_ms(...)" är det väl bara att programmera den, jag har inte gjort det, delvis för att det är dålig programmeringsstil att stoppa en lång process med att vänta och dels för att jag gör interruptdrivna timers till sådana saker.
Jag har å andra sidan färdiga rutiner (i form av *.h-filer) med LCD-styrning, RTC, I²C, EEPROM, SPI-kommunikation, UART kommunikation (interruptstyrd) och en del annat. Jag använder en gemensam fil med nödvändiga definitioner till att se till att ett kommerciellt produkt och det PC-program man kan använda till detta produkt kan kommunicera, detta då produktens program är gjort i C och PC-programmet i Borland C Builder 6, då kan de använda en gemensam referensfil.
Produkten kan i övrigt stanna helt av i main-loop'en och fortfarande fungera då all styrning sker i interrupt.
Skulle jag ha gjort allt detta i BASIC hade jag nog fortfarande suttit och debuggad.....
Sodjan:
Det står om adcon0 i manualen. Den har jag försökt konfigurera enligt Datasheet och manual. Sen finns ju adcon1 och ansel som borde sättas upp.
Jag har läst manualen och datasheet, men får det inte att funka.
Kräver inte att du hjälper mig, hoppas bara att det finns någon på forumet som liksom jag tycker att det är kul och hjälpa andra.
Icecap: Det låter som att du jobbat med mikroprocessorer ganska länge.
Du har säkert helt rätt om man bör lära känna sin mikroprocessor innan man börjar programmera den..
Ni har nog övertalat mig..
Det står om adcon0 i manualen. Den har jag försökt konfigurera enligt Datasheet och manual. Sen finns ju adcon1 och ansel som borde sättas upp.
Jag har läst manualen och datasheet, men får det inte att funka.
Kräver inte att du hjälper mig, hoppas bara att det finns någon på forumet som liksom jag tycker att det är kul och hjälpa andra.
Icecap: Det låter som att du jobbat med mikroprocessorer ganska länge.
Du har säkert helt rätt om man bör lära känna sin mikroprocessor innan man börjar programmera den..
Ni har nog övertalat mig..
Jag såg det där om ADCON0. Det kan inte vara något annat än ett exempel,
eftersom registren kan heta lite olika mellan olika PIC modeller.
Generellt sett är jag inte speciellt förtjust i Mikroelektronikas manualer,
de är slarvigt och lite amatörmässigt skrivna och med kodexempel utan
referens till vilken processor den är avsedd för.
Men som sagt, så har databladet svaret (jag har inte kollat eftersom jag
inte var säker på att du hade kollat först...)
> Jag har läst manualen och datasheet, men får det inte att funka.
Nähä. Inte mycket att göra åt (för oss som inte vet vad du har gjort...).
Notera att det inte räcker med att läsa, man måste skriva lite kod också...
Om om du har kod som inte fungerar, visa den !! Hur ska någon annan annars
kunna veta vad *du* har gjort för fel ?
eftersom registren kan heta lite olika mellan olika PIC modeller.
Generellt sett är jag inte speciellt förtjust i Mikroelektronikas manualer,
de är slarvigt och lite amatörmässigt skrivna och med kodexempel utan
referens till vilken processor den är avsedd för.
Men som sagt, så har databladet svaret (jag har inte kollat eftersom jag
inte var säker på att du hade kollat först...)
> Jag har läst manualen och datasheet, men får det inte att funka.
Nähä. Inte mycket att göra åt (för oss som inte vet vad du har gjort...).
Notera att det inte räcker med att läsa, man måste skriva lite kod också...

Om om du har kod som inte fungerar, visa den !! Hur ska någon annan annars
kunna veta vad *du* har gjort för fel ?