Sida 1 av 2

Min BS2 beter sig inte som jag vill!

Postat: 28 april 2007, 17:26:19
av squiz3r
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!!

Koden finns på http://www.crazycasemod.se/bs2.txt
eller:

Kod: Markera allt

' {$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..

//Daniel A

Postat: 29 april 2007, 12:57:48
av v-g
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.

Postat: 29 april 2007, 13:26:56
av squiz3r
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?

//Daniel A

Postat: 29 april 2007, 13:50:48
av v-g
Som jag ser det så skall det ju vara vattentätt. Ser inga fel i koden alls.

Du får göra som så att du skickar debug från BS2 till PC efter VARJE rad och kollar när och var den hoppar hur.

Du kan ju lägga så att den väntar i programmet på input från datorn så ser du ju exakt var den är. Faktist en mycket bra sak på BS2.

Postat: 29 april 2007, 15:31:34
av squiz3r
Ja de e det :) Får se om jag hinner göra det... (Är oerhört sressad :( )


Tack!
//Daniel A

Postat: 29 april 2007, 17:20:56
av bearing

Kod: Markera allt

IF timer = 1 THEN main 
Det ska vara THEN GOTO MAIN tror jag.

Postat: 29 april 2007, 17:47:02
av squiz3r
Det behövs inte i PBasic. om man skriver "then main" så hoppar den till main, men om man skriver:
__

if..... then
goto main
else
goto index
enif
__

Så måste man ha "goto"

Edit: Jag funderar på reset pinnen, den hänger bara i luften men enligt parallax scheman så ska den det :(

Postat: 29 april 2007, 18:14:05
av v-g
Klipp och klistra i programmet kan väl inte vara sådär jättesvårt om du ändå har det till en dator så är ju allt i princip redan klart.

Man skriver väl bara

Kod: Markera allt

DEBUG "Hej jag är på rad1"
DEBUGIN


Vips så måste varje rad bekräftas och du ser direkt var felet är.

Postat: 29 april 2007, 19:02:43
av squiz3r
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 :cry: :verysad:

Postat: 29 april 2007, 19:42:15
av v-g
Allt står ju i manualen rätt självklart beskrivet bäst är nog att läsa där och fråga om något är oklart.

DEBUGIN är iaf ett kommando för att skicka från PCn till BS under runtime så att säga.

Konkret förklaring:
DEBUG är från BS-->PC
DEBUGIN är tvärtom.

Postat: 29 april 2007, 20:32:53
av squiz3r
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 :cry: Men om den kommer hålla på så här hela tiden så är det ju ingen idé...
//Daniel A

Postat: 29 april 2007, 21:00:24
av v-g
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?

Postat: 29 april 2007, 22:08:03
av squiz3r
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 :eek2: Och dessutom är "moderkortet" gjort för en BS2'a..

//Daniel A

Postat: 29 april 2007, 22:11:01
av v-g
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.

Lycka till.

Postat: 29 april 2007, 22:13:37
av squiz3r
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??

//Daniel A