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

Större bild

Större bild

Större bild

Större bild

Större 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
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
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