Vítejte na Elektro Bastlírn?
Nuke - Elektro Bastlirna
  Vytvořit účet Hlavní · Fórum · DDump · Profil · Zprávy · Hledat na fóru · Příspěvky na provoz EB

Vlákno na téma KORONAVIRUS - nutná registrace


Nuke - Elektro Bastlirna: Diskuzní fórum

 FAQFAQ   HledatHledat   Uživatelské skupinyUživatelské skupiny   ProfilProfil   Soukromé zprávySoukromé zprávy   PřihlášeníPřihlášení 

Programování pic pro robota Minisumo

 
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Programování PIC, ATMEL, EEPROM a dalších obvodů
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
Argonisius
Neregistrovaný





PříspěvekZaslal: ne únor 08 2009, 12:18    Předmět: Programování pic pro robota Minisumo Citovat

Dobrý den, koupil jsem si již sestaveného robota minisumo, s tím, že si ho naprogramuju. Zkoušel jsem to, ale vůbec to nechápu. Má dva procesor spojené sériovou linkou. Bylo mi zděleno, že mám programovat jen jeden z nich a to PIC18F252. K tomu mi poslali tento program:

'robot

'#pragma DATA _CONFIG2H, _WDT_OFF_2H & _WDTPS_128_2H


#pragma DATA _CONFIG1H, _OSCS_OFF_1H & _HSPLL_OSC_1H
#pragma DATA _CONFIG2L, _BOR_ON_2L & _BORV_42_2L & _PWRT_ON_2L
#pragma DATA _CONFIG2H, _WDT_OFF_2H & _WDTPS_128_2H
#pragma DATA _CONFIG3H, _CCP2MX_OFF_3H
#pragma DATA _CONFIG4L, _STVR_ON_4L & _LVP_OFF_4L & _DEBUG_OFF_4L
#pragma DATA _CONFIG5L, _CP0_ON_5L & _CP1_ON_5L & _CP2_ON_5L & _CP3_ON_5L
#pragma DATA _CONFIG5H, _CPB_ON_5H & _CPD_ON_5H
#pragma DATA _CONFIG6L, _WRT0_OFF_6L & _WRT1_OFF_6L & _WRT2_OFF_6L & _WRT3_OFF_6L
#pragma DATA _CONFIG6H, _WRTC_ON_6H & _WRTB_ON_6H & _WRTD_OFF_6H
#pragma DATA _CONFIG7L, _EBTR0_OFF_7L & _EBTR1_OFF_7L & _EBTR2_OFF_7L & _EBTR3_OFF_7L
#pragma DATA _CONFIG7H, _EBTRB_ON_7H

#pragma CLOCK_FREQ 40000000

Function receive() As Byte
If (rcsta & (1 << OERR)) = 0 Then
rcsta = rcsta & ~(1 << CREN)
rcsta = rcsta | (1 << CREN)
End If
'Do While pir1 & (1 << RCIF) Loop //-puvodni, opraveno nize !
Do While (pir1 & (1 << RCIF)) = 0 Loop
receive = rcreg

End Function

Sub send(c As Byte)
Do while (pir1 & (1 << TXIF)) = 0 Loop
txreg = c
End Sub

Sub main()
Dim motors As Byte
Dim sensors As Byte
Dim leds As Byte
Dim buttons As Byte

'NASTAVENI IO
lata=0xFF
latb=0
latc=0xFF
trisa=0xF0
trisb=0x3F
trisc=0x9F

'VYPNOUT ADC
adcon1=0xC6
adcon0=0xC0

'UART 9600bps
spbrg=64
txsta = txsta & ~(1 << BRGH)
txsta = txsta | (1 << TXEN)
rcsta = rcsta | (1 << CREN)
rcsta = rcsta | (1 << SPEN)

motors = 0
Do while 1
'nacteni stavu tlacitek
buttons = portb
'tlacitko je stisknuto, pokud je prislusny bit v 0
'prirazeni bitu v bajtu buttons k tlacitkum
'BIT0 LEVE HORNI
'BIT1 LEVE STREDNI
'BIT2 PRAVE DOLNI
'BIT3 LEVE DOLNI
'BIT4 PRAVE STREDNI
'BIT5 PRAVE HORNI
'BIT6 REZERVOVAN
'BIT7 REZERVOVAN

'pokud je stisknuto jakekoli tlacitko, robot zastavi
If (buttons & 0x3F)<>0x3F Then
motors = 0
End If

'Bity v bajtu motors
'BIT7=LEVY MOTOR vpred(0)/vzad(1),BIT6 az 4=LEVY MOTOR RYCHLOST 0 az 7
'BIT3=PRAVY MOTOR vpred(0)/vzad(1),BIT2 az 0=PRAVY MOTOR RYCHLOST 0 az 7
Call send(motors) 'vysli jak se maji tocit motory

sensors = Call receive() 'prijmi stav cidel senzoru
'Bity v bajtu sensors
'BIT3=LEVE SPODNI, BIT2=PRAVE SPODNI, BIT1=LEVE PREDNI, BIT0=PRAVE PREDNI
'prislusny bit v nule znamena aktivni senzor

leds = 0xFF 'zadna LED nema svitit

If (sensors & (1 << 0))=0 Then
'pravy predni senzor aktivni
motors=0xC4 'binarne 11000100
'rozsvit prislusnou LED k senzoru, zatim jen v promenne
leds = leds & ~(1 << 1) 'led sviti, kdyz se ji bit znuluje
ElseIf (sensors & (1 << 1))=0 Then
'levy predni senzor aktivni
motors=0x4C 'binarne 01001100
'rozsvit prislusnou LED k senzoru, zatim jen v promenne
leds = leds & ~(1 << 2) 'led sviti, kdyz se ji bit znuluje
Else
motors=0x77
End If

If (sensors & (1 << 2))=0 Then
'pravy spodni senzor aktivni
' motors=0 'zastav oba motory, vidim dole bilou
'rozsvit prislusnou LED k senzoru, zatim jen v promenne
leds = leds & ~(1 << 0) 'led sviti, kdyz se ji bit znuluje
End If

If (sensors & (1 << 3))=0 Then
'levy spodni senzor aktivni
' motors=0 'zastav oba motory, vidim dole bilou
'rozsvit prislusnou LED k senzoru, zatim jen v promenne
leds = leds & ~(1 << 3) 'led sviti, kdyz se ji bit znuluje
End If

'fyzicky led rozsvitit nebo zhasnout, vsechny zaroven podle promenne leds
lata = leds

Loop

End Sub

Je v basicu (asi Visual Basicu, já se v tom nevyznám) Ale vůbec nechápu ty instrukce. Mohl byste mi někdo objasnit jak to funguje? Jsou tam potřeba ta vrchní řádky (#pragma DATA_CONFIG..... atd.)? Uvítal bych třeba nějaký příklad, že by třeba jen robot jel dopředu a otočil se. (pro snazší pochopení)

Díky. Argonisius
[/code]



brain252_4.asm
 Komentář:
Toto by měla být nějaká testovací aplikace pro tohoto robota, samotná aplikace je mezi ;bootloader a ;end of bootloader

Stáhnout
 Soubor:  brain252_4.asm
 Velikost:  9.5 kB
 Staženo:  104 krát

Návrat nahoru
Zobrazit příspěvky z předchozích:   
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Programování PIC, ATMEL, EEPROM a dalších obvodů Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra.
Nemůžete odpovídat na témata v tomto fóru.
Nemůžete upravovat své příspěvky v tomto fóru.
Nemůžete mazat své příspěvky v tomto fóru.
Nemůžete hlasovat v tomto fóru.
Nemůžete připojovat soubory k příspěvkům
Můžete stahovat a prohlížet přiložené soubory

Powered by phpBB © 2001, 2005 phpBB Group
Forums ©
Nuke - Elektro Bastlirna

Informace na portálu Elektro bastlírny jsou prezentovány za účelem vzdělání čtenářů a rozšíření zájmu o elektroniku. Autoři článků na serveru neberou žádnou zodpovědnost za škody vzniklé těmito zapojeními. Rovněž neberou žádnou odpovědnost za případnou újmu na zdraví vzniklou úrazem elektrickým proudem. Autoři a správci těchto stránek nepřejímají záruku za správnost zveřejněných materiálů. Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva. Použití konstrukcí v rozporu se zákonem je přísně zakázáno. Vzhledem k tomu, že původ předkládaných materiálů nelze žádným způsobem dohledat, nelze je použít pro komerční účely! Tento nekomerční server nemá z uvedených zapojení či konstrukcí žádný zisk. Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ. V případě, že zjistíte porušení autorského práva či jiné nesrovnalosti, kontaktujte administrátory na diskuzním fóru EB.


PHP-Nuke Copyright © 2005 by Francisco Burzi. This is free software, and you may redistribute it under the GPL. PHP-Nuke comes with absolutely no warranty, for details, see the license.
Čas potřebný ke zpracování stránky 0.17 sekund