2010. április 5., hétfő

Egy kis szoftverfejlesztés a szünetre...

Mivel Atesz birtokolja a gépezetet a szünetben, ezért én most csak elméleti síkon dolgozom, illetve próbapanelon próbálgatom ki az új cuccokat. Megírtam a mikrokontrollerbe a kapcsolók figyelését, amik akkor adnak majd 5V-ot a mikrokontroller adott lábára, ha a kapcsolókat megnyomja mondjuk egy akadály. A rover szélére lesz téve a 4 kapcsoló, és fémlemezek lesznek rájuk erősítve. Ha a rover ütközik, akkor rögtön megáll, és kicsit visszafog hátrálni az akadálytól. Ezt a részt a main programrészben egy végtelen ciklusban vizsgáljuk. Erre 4 lábát el kell használni a miktrokontrollernek, mert azt is tudni akarjuk, hogy hol van az akadály, nem csak a tényt, hogy neki mentünk valaminek.
Megírtam a megszakításvizsgálatot az elfordulás érzékelésére. Egy inkrementális jeladót fogunk használni erre a célra ha minden igaz, illetve oldalanként egyet. Így tudjuk majd mérni a kanyarodást is, illetve az előre/hátra haladást is. Az INT0 és INT1 megszakítás vektorát használtam fel a 8bites ATmega32-nek.

A szervómotorok vezérlését a motorokvezérléséhez felhasznált órajelhez kellett igazítani. Mivel a szervónak 10ms periódus idejű jel kell aminek 1-2 ms között van 5V-on a jel a maradék időben pedig 0-n, ezért leosztottam a prescalerrel a főórajelet 8-al. 8MHz esetében ez 1MHz-et eredményez. Ezzel a sebességgel elszámoltatok egy számlálót 50-ig. Ekkor már csak 20kHz maradt. Ezt 10ig számoltatom a motorok esetében, és így lehet 4 előre és 4 hátra sebességet definiálni. A szervók esetében pedig 200-ig számoltatom őket, így kijön a 100Hz-es jel. és ezen belül a végállások úgy alakulnak, hogy 10 és 46 között állítom, hogy meddig van 5V-on a jel és a maradék időben 0V. Így 5 fokos felbontást lehet elérni, mivel 46-10=36 és a szervó 180fokot tud forogni, tehát 180/36=5 . Ezt innentől már könnyen lehet használni korlátlan számú szervó esetén is. A mi esetünkben 4 szervó lesz használatban, de a biztonság kedvéért most 8 szervóra méreteztem a dolgokat. Persze ezekhez a változtatásokhoz hozzá kellett igazítani a PC-s szoftvert is, hogy kompatibilisek legyenek egymással.

Ezenkívül átírtam a teljes kommunikációt, most úgy döntöttem, hogy egyelőre elegek lesznek a 6 byte-os üzenetek is. Az első bájt a címzett eszközé pl szervó vagy motorvezérlő, a második szervó esetén a szög, motorvezérlő esetén egy olyan érték, amely magában foglalja a sebességet, és a mozgás irányát. 3 sebességfokozat van minden irányban. A következő bájtban megadom az elfordulás szögét 0-180 fok közötti érték. A 4. bájtban a távolságot centiméterben. Mivel egy bájt az üzenet mérete és lehet hogy 255cm-nél többet szeretnénk menni, ezért az 5. bájtban lehetőség van még 255cm út elküldésére. Amennyiben kevesebb mint 255 cm-t szeretnénk megtenni akkor az 5. bájt üres marad. A 6. bájtban pedig egy 255 értékű lezáró bájtot küldünk.
A grafikus útvonaltervező cuccost is teljesen ehhez a sémához igazítottam, így az már pontosan legenerálja és elküldi a parancsokat a kontrollernek.

Következő feladat az lesz, hogy a kontrollerben létrehozzak egy FIFO-t aminek a segítségével lehetőségem nyílik rá, hogy több üzenetet leküldjek egymás utána  kontrollerbe és azok ott tárolódjanak, és sorban amint az előző véget ért, végrehajtódjanak. Remélem hamarosan ez is meglesz.

Nincsenek megjegyzések:

Megjegyzés küldése