Sida 1 av 3

Projektarbete Larvbands Robot 2009 PIC Kristall Fråga

Postat: 18 februari 2009, 17:49:19
av Cryptomaster
Hej!

Jag och en kompis håller på i projektarbete att bygga en robot med larvband. Allting fungerar som det är tänkt men en liten fråga återstår innan det är komplett och jag kan posta upp allting i en "Projekt tråd" här.

Jag har 3 stycken PIC 16F628A på ett kort, kan man få alla att gå på en gemensam kristall ?
T ex koppla ihop XTAL1 och XTAL2 mellan alla PIC'ar ?

Mvh
Cryptomaster

Edit:
Sådär!
Har ett fungerande resultat av projektet. Drivning av banden sköts av vardera stegmotor.
Motorn ligger på 3 ohm och drivs från ett NIMH ack på 7,2 Volt.
I Fjärrkontrollen sitter en 16F628A som skickar ut datan seriellt när man trycker in knapparna.
Och i mottagaren 3 stycken 16F628A som tar emot det och skickar signaler till motordrivarna och ett relä som släpper på matningsspänning till motorerna.
Den fungerar bra när den fungerar, men är något opålitlig då den ibland löper amok och bara kör utan att man har kontroll över den.
Har inte riktigt förstått vad det är som går snett när den gör så.

PIC processorerna är programmerade i PIC Basic Pro och här följer koder samt bilder:

Större bild
Bild

Större bild
Bild

Större bild
Bild

Större bild
Bild

Större bild
Bild

Större bild
Bild

Programmet i PIC för höger motor:

Kod: Markera allt

Define osc 4
Include "modedefs.bas"
CMCON = 7
VRCON = 0


gear    var     PORTA.2
SI      VAR     PORTA.1
puls    var     portb.3           
B0      var     byte

loop:
serin SI,T300,500,LOOP,B0
SELECT CASE b0
    case "E"
        gosub highforward
    case "F"
        gosub lowforward
    CASE "G"
        gosub lowbackward
    CASE "H"
        gosub highbackward
    CASE "I"
        GOSUB STOPP
end select
                  
Goto LOOP

lowforward:
    low gear
    hpwm 1,10,245
return

highforward:
    low gear
    hpwm 1,127,380
return

lowbackward:
    high gear
    hpwm 1,10,245
return

highbackward:
    high gear
    hpwm 1,127,380
return

stopp:
    ccp1con = 0
    low puls
return      
Programmet i PIC för vänster motor:

Kod: Markera allt

Define osc 4
Include "modedefs.bas"          
CMCON = 7
VRCON = 0

gear    var     PORTA.2
SI      VAR     PORTA.1
puls    var     portb.3          
B0      var     byte


loop:
serin SI,T300,500,LOOP,B0
SELECT CASE b0
    case "A"
        gosub highforward
    case "B"
        gosub lowforward
    CASE "C"
        gosub lowbackward
    CASE "D"
        gosub highbackward
    CASE "I"
        GOSUB STOPP
end select
                  
Goto LOOP

lowforward:
    High gear
    hpwm 1,10,245
return

highforward:
    High gear
    hpwm 1,127,380
return

lowbackward:
    low gear
    hpwm 1,10,245
return

highbackward:
    low gear
    hpwm 1,127,380
return

stopp:
    ccp1con = 0
    low puls
return      

Programmet i PIC för styrning av matningen till motorerna:

Kod: Markera allt

Define osc 4
Include "modedefs.bas"          
CMCON=7
CCP1CON=0

SI      VAR     PORTA.1          
B0      var     byte
relay    VAR    PORTB.3
high relay

main:
SERIN SI,T300,500,MAIN,B0
if (b0 = "I") then
low RELAY
else
high relay
endif
GOTO MAIN
Programmet i fjärrkontrollen:

Kod: Markera allt

Define osc 4
Include "modedefs.bas"          ' Include serial modes
CMCON = 7
VRCON = 0

knapp1 var portb.0
knapp2 var portb.5
knapp3 var portb.2
knapp4 var portb.4
knapp5 var portb.1
knapp6 var portb.6
knapp7 var portb.7
input knapp1
input knapp2
input knapp3
input knapp4
input knapp5
input knapp6
input knapp7


SO      VAR     PORTA.2         
B0      var     byte

main:
   
IF knapp1 and knapp6 THEN gosub leftfastforward
    
IF knapp1 and knapp7 THEN gosub leftlowforward
   
IF knapp2 and knapp6 THEN gosub leftfastbackward
   
IF knapp2 and knapp7 THEN gosub leftlowbackward
    
IF knapp3 and knapp6 THEN gosub rightfastforward

IF knapp3 and knapp7 THEN gosub rightlowforward 
    
IF knapp4 and knapp6 THEN gosub rightfastbackward
    
IF knapp4 and knapp7 THEN gosub rightlowbackward

IF not knapp1 and not knapp2 and not knapp3 and not knapp4 AND NOT KNAPP5 THEN gosub neutral
    
IF knapp5 then gosub brake

Goto main    

leftfastforward:
    B0 = "A"
    Serout SO,T300,[B0]
return

leftlowforward:
    B0 = "B"
    Serout SO,T300,[B0]
return

leftlowbackward:
    B0 = "C"
    Serout SO,T300,[B0]
return

leftfastbackward:
    B0 = "D"
    Serout SO,T300,[B0]
return

rightfastforward:
    B0 = "E"
    Serout SO,T300,[B0]
return

rightlowforward:
    B0 = "F"
    Serout SO,T300,[B0]
return

rightlowbackward:
    B0 = "G"
    Serout SO,T300,[B0]
return

rightfastbackward:
    B0 = "H"
    Serout SO,T300,[B0]
return

neutral:
    B0 = "I"
    Serout SO,T300,[B0]
return

brake:
    b0 = "J"
    serout so,T300,[B0]
return                   

Re: Projektarbete Larvbands Robot 2009 PIC Kristall Fråga

Postat: 18 februari 2009, 19:42:10
av victor_passe
Kan man inte koppla kristallen till en som vanligt och kristall ingången på PIC:en (Den pinnen där du får en sinus våg) till alla andras klock ingång?

Re: Projektarbete Larvbands Robot 2009 PIC Kristall Fråga

Postat: 18 februari 2009, 19:44:33
av sodjan
En vanlig kristall är i princip tänkt för att köra en ensam processor. Det kan
fungera att fuska, men det är inte säkert att det blir driftsäkert.

Om man vill göra "rätt" så använder man en extern oscillator ("canned osc")
som utan problem kan driva flera processorer. T.ex ELFA 74-560-56. Eller
någon liknande om det inte är just 20 MHz nu behöver. För ca 30:- så är det
ju en "no-brainer"...

Varför är det tre processorer överhuvudtaget ? Hinner inte en ensam med ?

Re: Projektarbete Larvbands Robot 2009 PIC Kristall Fråga

Postat: 18 februari 2009, 19:51:09
av victor_passe
Varför ska du ha samma kristall?
Är det för att alla ska jobba exakt samtidigt? måste de gå i 20MHZ för annars blir det för sakta?
För det finns ju intern klocka så slipper ni ha någon alls. Men den är bara på 8MHz.
Om alla ska jobba samtidigt kan man väll ha en på intern klocka och ställa in att osc pinnarna ska svänga i takt med klockan och driva de 2 andra pic:arna med den signalen.
Då slipper ni också extern klocka men det går bara i 8MHZ

Re: Projektarbete Larvbands Robot 2009 PIC Kristall Fråga

Postat: 18 februari 2009, 19:53:53
av sodjan
> Men den är bara på 8MHz.

4

> ställa in att osc pinnarna ska svänga i takt med klockan

Fosc/4.
D.v.s en PIC på 4 MHz och de andra två på 1 Mhz.
Kan naturligtsivs vara helt OK...

Re: Projektarbete Larvbands Robot 2009 PIC Kristall Fråga

Postat: 18 februari 2009, 20:48:03
av Cryptomaster
Tack för alla svar!

Jag kommer lösa det med en enskild kristall/kondningar, till varje PIC.
Vad jag var ute efter var att spara komponenter om det gick på ett enkelt och tillförlitligt sätt.
Varför är det tre processorer överhuvudtaget ? Hinner inte en ensam med ?
Jag har valt att använda 3 stycken då jag inte litar på mina programmeringskunskaper nog för att lösa samma uppgifter trots att det är möjligt att en enskild skulle klara av det.

Har 2 stycken stegmotorer som konstant måste få ett pulståg och en pinne med 1:a eller 0:a som väljer riktning.
Detta gör jag genom HårdvaruPWM.
Varje enskild PIC lyssnar samtidigt på en datakanal från en trådlös mottagare och är beredd att agera utifrån datan dem får in.
Är det för att alla ska jobba exakt samtidigt? måste de gå i 20MHZ för annars blir det för sakta?
Nej och Nej, 4 Mhz duger bra, men kan inte köra med den interna klockan, får då problem med min applikation med serie överföring.
Dom behöver inte jobba samtidigt heller, var bara ute efter att spara in på komponenter på ett enkelt och tillförlitligt sätt.

Re: Projektarbete Larvbands Robot 2009 PIC Kristall Fråga

Postat: 20 februari 2009, 22:15:41
av T0ny
Kanske sent ute men iaf:
En av PICarna kopplar du till kristallen och kondingarna.
Den pinne som heter "osc out" eller något liknande kopplar du till ingången på en inverterare (74HC04), utgången på inverteraren går till de övriga
picarnas "osc in", dessa PICar programerar du till "extern oscillator".
Alternativt sätter du två inverterare i serie (samma fas på klocksignalen).

Re: Projektarbete Larvbands Robot 2009 PIC Kristall Fråga

Postat: 21 februari 2009, 01:12:58
av Cryptomaster
Jo lite sent ute, men bra i alla fall att detta finns med i "arkivet".
Kan användas i framtiden utav någon.
Jag har löst detta problem med en separat kristall till varje processor, och jag väntar mig lyckas ta bilder nån gång nästa vecka :)

Re: Projektarbete Larvbands Robot 2009 PIC Kristall Fråga

Postat: 8 mars 2009, 21:15:29
av Cryptomaster
Uppdaterat med bilder och kod nu, om någon har lite mer erfarenhet av SERIN & SEROUT kommandot i Picbasic så är tips varmt välkommna på mitt problem :)

Re: Projektarbete Larvbands Robot 2009 PIC Kristall Fråga

Postat: 8 mars 2009, 22:00:05
av sodjan
Vilket "problem" ?

(Nej, jag tänker inte läsa igenom allt det gamla, i så fall får det vara...)

Re: Projektarbete Larvbands Robot 2009 PIC Kristall Fråga

Postat: 9 mars 2009, 00:06:56
av Cryptomaster
"Den fungerar bra när den fungerar, men är något opålitlig då den ibland löper amok och bara kör utan att man har kontroll över den.
Har inte riktigt förstått vad det är som går snett när den gör så."

Eftersom motorerna styrs från den inbyggda PWM modulen så vet jag inte riktigt vad som hänger sig i programmet. PWM modulen tuggar ju endå på i bakgrunden. Han slutar att svara på kommandon helt och verkar inte läsa in några nya byte. Jag har inte hittat någon metod för att få igång han igen som funkar varje gång. Så mycket som inte är regelbundet så riktigt svårt att felsöka det :/

Re: Projektarbete Larvbands Robot 2009 PIC Kristall Fråga

Postat: 9 mars 2009, 00:29:57
av sodjan
Aha, OK, ja det var ju inte mycket att gå på... :-)

Jag skulle kanske lägga till något som visar var processorn är i koden.
Finns det någon display eller några lysdioder ? Alltså skriva något
som uppdateras hela tiden beroende på var koden befinner sig, när
det sedan hänger upp sig, så kan detta ge en ledtråd om var den hänger.
Det gör inget att det uppdaterar snabbt som 17 (så att man inte hänger med)
medan det fungerar, det är ju inte lika intressant...

Vad får du göra för att komma ur det ? Reset ?

Re: Projektarbete Larvbands Robot 2009 PIC Kristall Fråga

Postat: 9 mars 2009, 01:03:05
av Walle
Så som sodjan beskriver brukar jag göra. Vid all felsökning av kod :) För itererade for/while-loopar brukar jag köra med något i stil med "Level 1", "level 2" beroende på vilken "nivå" i iterationen den är i.

Re: Projektarbete Larvbands Robot 2009 PIC Kristall Fråga

Postat: 9 mars 2009, 01:59:20
av v-g
En display eller seriellport är super för felsökning. Man skickar bara i klartext eller kod var man är någonstans. Fungerar kanske inte vid tidskritiska apps. men för det mesta fungerar det perfekt. LED kan flimra snabbt om det vill sig illa ;)

Re: Projektarbete Larvbands Robot 2009 PIC Kristall Fråga

Postat: 9 mars 2009, 02:16:25
av cyprox
Läste apropå detta på http://www.ganssle.com om hur en del utvecklare använder bara en lysdiod för att signalera fel. Lysdioden blinkar då i ett visst mönster som motsvarar en felkod. Detta fungerar ju däremot bara om man har någon slags error-handler i programmet. Annars tycker jag de andras idéer var bra