Behöver hjälp med min kod!

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Behöver hjälp med min kod!

Inlägg av sodjan »

Det där är alldels för lite kod för att få något alls att fungera.
Har du ens lyckats testköra det där ??
Ta några dagar eller en vecka (beroende på hur mycket
tid du behöver) och skriv lite testkod. Sedan får vi se.
Läs på om timers. Kolla upp "debounce". Skriv en timerstyrd interrupt-rutin
och få *det* att fungera först. o.s.v. Början sedan med *en* knapp först.
Du har massor att fundera på innan du ens kommer i närheten av specen
som du skrev i första inlägget. Du går för snabbt framåt. Glöm tillsvidare
helt det du faktiskt vill göra och koncentrera dig på att lära dig
grundtekniken först instället.
v-g
EF Sponsor
Inlägg: 7875
Blev medlem: 25 november 2005, 23:47:53
Ort: Kramforce

Re: Behöver hjälp med min kod!

Inlägg av v-g »

Som jag skrev var det ett exempel på hur koden kan se ut BITVIS alltså inte en hel kod det kommer jag inte skriva utan det får du göra på egen hand. Se det som vägledning helt enkelt ;)
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Behöver hjälp med min kod!

Inlägg av sodjan »

I digitala sammanhang är "delvis" kanske ett bättre uttryck en "bitvis"... :-) :-)
v-g
EF Sponsor
Inlägg: 7875
Blev medlem: 25 november 2005, 23:47:53
Ort: Kramforce

Re: Behöver hjälp med min kod!

Inlägg av v-g »

sodjan: :mrgreen: Helt rätt särskit med stora bokstäver kan det bli förvirrande ;)
Användarvisningsbild
vfr
EF Sponsor
Inlägg: 3515
Blev medlem: 31 mars 2005, 17:55:45
Ort: Kungsbacka

Re: Behöver hjälp med min kod!

Inlägg av vfr »

Hehe. Bitvis är väl en jättebra beskrivning. Då får man ju två syftningar "for the price of one". :D :vissla:
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: Behöver hjälp med min kod!

Inlägg av jesse »

Du har ganska många "kanaler" till en massa lampor... men du skriver att "alla ska blinka" eller "alla är avstängda" typ.

Menar du att alla ska blinka samtidigt, eller har du tänkt dig olika mönster som rinnande ljus eller växlande ...?

Ett sätt att lösa problemet på är att du har ett timerstyrt interrupt som går igång lagom ofta :vissla: och som sköter själva blinkandet med hjälp av dels indata som säger vilket program du kör för tillfället, dels räknare som håller reda på tiden. Då blir processorn fri och ledig att i huvudprogrammet bara känna av knapparna och ändra programnummer.

t.ex.

knapp 1 intryckt --> PROGNR = 1
knapp 2 intryckt --> PROGNR = 2


interruptrutinen kollar sedan av PROGNR och gör oluka saker beroende på vilket nr det står.

tips när det gäller den där tredje knappen som ska "bara tryckas in en kort stund":
Du måste få processorn att minnas om knappen var nedtryckt eller inte förra gången du kollade. (det gör du genom att spara det avlästa värdet efteråt i en annan variabel). Om den inte var nedtryckt innan, men är det nu, då har du precis tryckt ner den, och du ska göra något (byta program)

sen gör du inget alls oavsett om knappen är nedtryckt eller inte , förrän samma vilkor uppstår igen, dvs. först var den inte nedtryckt, sedan var den nedtryckt. eh..något oklart förklarat , men fundera lite bara... rita nåt slags dagram eller nåt med en tidslinje och vad som händer...
Crille93
Inlägg: 96
Blev medlem: 2 maj 2009, 19:40:12

Re: Behöver hjälp med min kod!

Inlägg av Crille93 »

Jag har ändrat mig lite för att få mer I/O fria :mrgreen:

Jag tänkte istället att jag sätter strömbrytarna till blinkersen såhär:
Processor->Blinkers->Strömbrytare->Jord
Så har jag ett "program" för blinkersen som gör så att dom blinkar växelvis (när vänstra blinkersen är släckt så är högra blinkersen tänd, men eftersom jag har strömbrytare mellan blinkersen och jorden så fungerar dom endast när jag slår på vänster/höger strömbrytare).

Jesse: jag tänkte ha som "rinnande ljus" och andra saker under mopeden :wink:

Men här är hur jag har tänkt!
Varje program loopar hela tiden tills man trycker till på tryckströmbrytaren, för då hoppar den till nästa program som loopar hela tiden tills jag trycker igen osv.
Bild
Så kommer programmen se ut.

Men jag undrar om man inte kan göra så att processorn kollar efter varje gång den har gjort ett "program" om man trycker in en strömbrytare, om det inte trycks in en strömbrytare så gör den om programmet en gång till för att kolla igen sen. Sedan om det trycks in en strömbrytare så kommer man vidare till ett "mellanläge" och stannar där tills man har släppt knappen och då går den vidare till nästa program.

Edit: Jag har nu hittat en kod som fungerar men jag behöver någon lektion i hur man öppnar inportar, jag har letat men jag kan inte hitta någon bra :( Var lärde ni er dessa grunder?
Användarvisningsbild
E85
Inlägg: 1274
Blev medlem: 29 maj 2007, 16:24:19
Ort: Övik

Re: Behöver hjälp med min kod!

Inlägg av E85 »

Databladet. Det är TRISx (x=A, B, C, D osv beroende på vilken port) som bestämmer, men allt står i databladet i I/O-sektionen.

exempelvis kan man skriva såhär i C för att sätta RA1 och RA3 som input och resten ut:
TRISA = 0b00001010;
Crille93
Inlägg: 96
Blev medlem: 2 maj 2009, 19:40:12

Re: Behöver hjälp med min kod!

Inlägg av Crille93 »

Men vad jag har förstått så är det bara RA3 som endast kan användas som input? Eller finns det fler som endast kan vara input?
För jag vill ha så få input som möjligt eftersom jag vill ha så många output till lysdioderna som möjligt.
Men jag hade hittat att man skrev

Kod: Markera allt

     movwf     TRISA
I register page 1 för att göra alla RA till input men jag vill som sagt bara ha 1 input, hur gör jag då?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Behöver hjälp med min kod!

Inlägg av sodjan »

> Varje program loopar...... nästa program som.....

Notera att en PIC bara kan köra *ETT* program. D.v.s att allt som
du vill att din PIC ska göra måste finnas i *ETT* program. Detta program
kan sedan ha olika delar som körs under vissa förrutsättningar. Men jag
tror att det blir lättare för sig att förstå det hela om du slutar tala
om olika/flera program.

Dessutom så kommer en ganska stor del av ditt program att vara gemensam
kod som körs oavsett i vilket "läge" det hela befinner sig i. T.ex avkänningen av
knapparna kommer ju säkert att vara gemensam, d.v.s finns bara en gång och
det finns ingen bra anledning att kopiera den delen av koden flera gånger.

> men jag behöver någon lektion i hur man öppnar inportar,

Om det är det jag tror att du undrar över så är det kapitlet "I/O PORTS"
i databladet. Har du ens *försökt* kolla ??

> Men vad jag har förstått så är det bara RA3 som endast kan användas som input? Eller finns det fler som endast kan vara input?

Jag är fullständigt övertygat att det framgår klart och tydligt av databladet.
Ett hett tips är också att låta bli RA3 tillsvidare. Att förklara varför blir nog lite
överkurs just nu, du kommer att förstå det senare. Låt bara bli RA3. Jag minns inte
vilken processor du använder, men jag utgår från att RA3 också är MCLR, eller hur ?
Låt den vara MCLR tillsvidare.

> Men jag hade hittat att man skrev "movwf TRISA" för att göra alla RA till input...

Det där överför bara W till TRISA. Vad som händer i TRISA beror helt på vilket
värde du har laddad W med innan...
bos
Inlägg: 2314
Blev medlem: 24 februari 2007, 23:29:15
Kontakt:

Re: Behöver hjälp med min kod!

Inlägg av bos »

Crille93 skrev:I register page 1 för att göra alla RA till input men jag vill som sagt bara ha 1 input, hur gör jag då?

Kod: Markera allt

movlw b'00000001'
movwf TRISA
eller

Kod: Markera allt

movlw b'00000010'
movwf TRISA
eller

Kod: Markera allt

movlw b'00000100'
movwf TRISA
eller

Kod: Markera allt

movlw b'00001000'
movwf TRISA
eller

Kod: Markera allt

movlw b'00010000'
movwf TRISA
eller

Kod: Markera allt

movlw b'00100000'
movwf TRISA
eller

Kod: Markera allt

movlw b'01000000'
movwf TRISA
eller

Kod: Markera allt

movlw b'10000000'
movwf TRISA
beroende på vilken av de åtta pinnarna du vill ha som input.
bos
Inlägg: 2314
Blev medlem: 24 februari 2007, 23:29:15
Kontakt:

Re: Behöver hjälp med min kod!

Inlägg av bos »

I övrigt rekommenderar jag att du köper den här boken. Läs den pärm till pärm.
Crille93
Inlägg: 96
Blev medlem: 2 maj 2009, 19:40:12

Re: Behöver hjälp med min kod!

Inlägg av Crille93 »

Tack! Jag får nog köpa den där boken när jag får pengar :D
Men jag testade att öppna alla I/O så testade jag en I/O i taget med en lysdiod (var för att testa om jag visste hur man öppnade alla I/O). Men det var bara 3-5 I/O som lysdioden lös på medans dom andra I/O så såg man väldigt lite hur bara tråden inne i lysdioden blinkade. Vad var det som var fel? Är det vissa I/O som bara skickar ut väldigt svag ström eller är det något annat? Jag kollade på vad picens olika I/O gör på http://ww1.microchip.com/downloads/en/D ... 41262C.pdf men jag såg inte något som kunde betyda att den skickade ut svagare ström från något I/O :? .

Jag har en PIC16F690.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Behöver hjälp med min kod!

Inlägg av sodjan »

Det är bättre att visa vad du har gjort (alltså *koden*) än att försöka beskriva
det i ord, det blir bara rörigt. Du *säger* att du har gjort en massa saker men
betyder inte mycket. Du måste också *visa* vad du faktiskt har gjort. Så visa
en bit kod som inte gör det du tror så kan vi säkert förklara varför.

Det är inte heller helt tydligt om du har läst "I/O PORTS" kapitlet för
den aktuella porten och *förstått* vad som står där. Har du det ?

Det saknas även annan information som t.ex *hur* du kopplade in lysdioden.
Det är lika bra att du skärper upp dig direkt och ser till att skriva kompletta frågor
med all rellevant information, det blir annars bara en massa motfrågor och i värsta
fall helt felaktiga svar p.g.a missförstånd.

> ...41262C.pdf

Märkligt, jag har revision "E" av databladet (DS41262E). Hur hittade du det där ?
Databladet som länkas från sidan för PIC16F690 är "E". Det finns i princip aldrig
någon anledning att inte använda det senaste.
Crille93
Inlägg: 96
Blev medlem: 2 maj 2009, 19:40:12

Re: Behöver hjälp med min kod!

Inlägg av Crille93 »

Såhär har jag gjort:

Kod: Markera allt

#include <p16F690.inc>
    __config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _BOR_OFF & _IESO_OFF & _FCMEN_OFF)
    cblock 0x20
Delay1                   ; Define two file registers for the
Delay2                   ; delay loop

     endc
      
     org 0
Start:
     bsf       STATUS,RP0
     clrf      TRISC
     clrf      TRISB
     clrf      TRISA
     movlw b'00001000'
     movwf     TRISA                ;Alla I/O är output förutom RA3 som är input
     bcf       STATUS,RP0

MainLoop:
     bsf       PORTC,2               ;RC2 tänds
InnerLoop1:
     decfsz    Delay1,f
     goto      InnerLoop1
     decfsz    Delay2,f
     goto      InnerLoop1
     btfss PORTA,3                  ;Får RA3 signaler? Ja=Hoppa över nästa.   Nej=Fortsätt till "goto MainLoop".
     goto      MainLoop

Wait1:
     btfsc PORTA,3                  ;Får RA3 signaler? Ja=Fortsätt till "goto Wait".  Nej=Hoppa över nästa.
     goto Wait1

;****************************HÄR ÄR FELET NÅGONSTANS*******************************
Loop:
;****Alla RC****
     bsf PORTC,0
     bsf PORTC,1
     bsf PORTC,2
     bsf PORTC,3
     bsf PORTC,4
     bsf PORTC,5
     bsf PORTC,6
     bsf PORTC,7
;****Alla RB****
     bsf PORTB,4
     bsf PORTB,5
     bsf PORTB,6
     bsf PORTB,7
;****Alla RA****
     bsf PORTA,0
     bsf PORTA,1
     bsf PORTA,2
     bsf PORTA,4
     bsf PORTA,5

InnerLoop2:
     decfsz    Delay1,f
     goto      InnerLoop2
     decfsz    Delay2,f
     goto      InnerLoop2
     btfss PORTA,3                  ;Får RA3 signaler? Ja=Hoppa över nästa.   Nej=Fortsätt till "goto Loop".
     goto Loop

Wait2:
     btfsc PORTA,3                  ;Får RA3 signaler? Ja=Fortsätt till "goto Wait2".  Nej=Hoppa över nästa.
     goto Wait2
     goto MainLoop
end
Så först så har jag RC,2 tänd och så byter jag till nästa del med hjälp av tryckströmbrytaren och i den delen så är alla I/O "öppna". Sedan så sätter jag lysdiodens katod på "GND" och lysdiodens anod på alla I/O (förutom RA3 som är input), en i taget. Och på vissa så lyser den som den ska medans på andra så kan man precis se att det lyser svagt om tråden i lysdioden.

Det databladet jag länkade till är ett som någon annan på det här forumet har länkat till.
Skriv svar