Hej, jag håller på att göra ett litet program som ska ta emot seriel data, och sen debuga den till datorn (den delen funkar). Men när jag startar upp den måste PIC'en som den pratar med hinna förbereda sig, så därför ska den inte starta fören IO 11 (timer) blir hög. Men avnågon anledning så verkar det som om den startar om hela tiden.. För att om jag startar den o låter timer bli hög så ska jag kunna stänga av timer sen uatan att påverka BS2'an... Men det går inte, för att varje "varv" den gör så går den till "index" loopen, Och det ska den ju inte!!
' {$STAMP BS2}
' {$PBASIC 2.5}
databits VAR Byte
data0 VAR databits.BIT0
data1 VAR databits.BIT1
data2 VAR databits.BIT2
data3 VAR databits.BIT3
data4 VAR databits.BIT4
data5 VAR databits.BIT5
data6 VAR databits.BIT6
data7 VAR databits.BIT7
LED PIN 0
clk_pic PIN 1
data_pic PIN 2
timer PIN 11
left_sevo PIN 12
OUTPUT left_sevo
INPUT data_pic
INPUT timer
index:
GOSUB blink_LED
IF timer = 1 THEN main
GOTO index:
' sub routines
request_data:
OUTPUT clk_pic
HIGH clk_pic
PAUSE 1
LOW clk_pic
INPUT clk_pic
RETURN
save_data:
DO
LOOP UNTIL IN1 =1
DO
LOOP UNTIL IN1 = 0
DO
LOOP UNTIL IN1 = 1
data0 = IN2
DO
LOOP UNTIL IN1 = 0
DO
LOOP UNTIL IN1 = 1
data1 = IN2
DO
LOOP UNTIL IN1 = 0
DO
LOOP UNTIL IN1 = 1
data2 = IN2
DO
LOOP UNTIL IN1 = 0
DO
LOOP UNTIL IN1 = 1
data3 = IN2
DO
LOOP UNTIL IN1 = 0
DO
LOOP UNTIL IN1 = 1
data4 = IN2
DO
LOOP UNTIL IN1 = 0
DO
LOOP UNTIL IN1 = 1
data5 = IN2
DO
LOOP UNTIL IN1 = 0
DO
LOOP UNTIL IN1 = 1
data6 = IN2
DO
LOOP UNTIL IN1 = 0
DO
LOOP UNTIL IN1 = 1
data7 = IN2
RETURN
blink_LED:
HIGH LED
PAUSE 500
LOW LED
PAUSE 500
RETURN
read_data:
DEBUG HOME, BIN8 databits
RETURN
'main routine
main:
GOSUB request_data
GOSUB save_data
GOTO read_data
GOTO main:
END
Är det något jag har glömt eller varit otydlig med så säg till.
Tacksam för snabba svar då jag behöver ha denna klar helst i morgon, abselut senast på torsdag..
Vad är det som startar om hela tiden? PIC/BS2/Timer ?
Om du har en utgång så testa med en lysdiod att indikera status det kan hjälpa i felsökningen. Tänk på att två lysdioder kan kopplas till samma utgång med den ena till plus & den andra till minus så ser man 1 eller 0 tydligt.
När jag startar BS2'an så ska den gå in i "index" loopen o vänta där till IO pinnen "timer" blir hög, då ska den gå vidare till "main" loopen och sen ska den gå runt i "main" loopen hela tiden. Men på något sätt så kommer den till "index" loopen varje "varv". Det är det jag inte förstår hur det går till
Jag kopplade en LED till en IO pinne o sa till den att den skulle blinka LED'n när den låg i "index" loopen. Vilkett borde betyda att den blinkar i början tills "timer" pinnen blir hög, men den blinkade hela tiden efter det också...
Vad för funktion har "END" ?? och vad händer om koden tar slut och det inte finns någon "END" utan bara tomrumm?
Hur man använder debug in funktionen vet jag inte riktigt. Men jag har hållt på länge nu med att den ska blinka LED's o debuga m.m. Men jag förstår mig ändå inte på den. Börjar bli rädd nu för att det inte blir något robotsm för min del
Jepp. Så mycket vet jag Jag funderar på att kasera BS2'an o ta en naken PIC, men då måste jag bygga om allting Men om den kommer hålla på så här hela tiden så är det ju ingen idé...
//Daniel A
Om koden som skall till PIC är densamma som här ovan så borde det nog inte ta allt för lång tid. Men såklart är det bättre att få igång det som det är nu. Vad händer om du kör som jag säger i de två senaste inläggen?
Jag tror att jag sattasar på en PIC istället.. BS2'an har varit konstig sen jag råkade kortsluta en IO pinne kom jag på, jag fattar inte varför men men... Jag vill inte riskera att den får att dampanfall mitt i tävlingen
Koden ovan är bara en liten liten bit av den slutliga koden som var tänkt att BS2'an skulle göra... Denna kodsnutten tar bara imot information om sensorerna. Så sen ska jag styra servon m.m. Borde inte vara så svart men jag har bara ca. 2 dagar kvar Och dessutom är "moderkortet" gjort för en BS2'a..
Aj fasen, ja är den skadad då gäller ju inte alla regler precis. Fast debug borde fungera ändå och lokalisera felet med så kanske man kan byta i/o pinne eller nåt. Men men PIC skulle var från början Kostar "aningen" mindre om en brinner upp.
Men jag förstår inte hur den kan ha blivit såhär av en bränd IO pinne... Skulle programet som ligger i PIC'en (som läser av basic instruktionerna från eepromet) ha ändrats på nått sätt så att den läser fel ibland??