Yrobot
Re: Yrobot
Takže mi odpísal:
V tom navode to bolo na scheme nakreslene chybne (cisla pinov), tie infra-led potrebujete napajat neustale (prepojim priamo na napajanie, nie cez tranzistor - ten je tam iba ak by sme chceli aplikovat nejake pokrocilejsie algoritmy - vypinat/zapinat), co sa ultrazvuku tyka, prepajate K3/5 s K2/3.
Z toho asi tak rozumiem že:
Tranzistor t.j. zapojenie (3a2) je na pokročilé funkcie...
Takže sa budeme držať pri spojení (1a2) t.j. senzory+sonar
V tom navode to bolo na scheme nakreslene chybne (cisla pinov), tie infra-led potrebujete napajat neustale (prepojim priamo na napajanie, nie cez tranzistor - ten je tam iba ak by sme chceli aplikovat nejake pokrocilejsie algoritmy - vypinat/zapinat), co sa ultrazvuku tyka, prepajate K3/5 s K2/3.
Z toho asi tak rozumiem že:
Tranzistor t.j. zapojenie (3a2) je na pokročilé funkcie...
Takže sa budeme držať pri spojení (1a2) t.j. senzory+sonar
Re: Yrobot
OK, propoj 1-2 a můžeme pokračovat.
Re: Yrobot
Ahoj.
Už som konečne doma. Dnes ak sa mi to podarí tak to prepojím...
A môžeme už na tom pracovať vlastne
Už som konečne doma. Dnes ak sa mi to podarí tak to prepojím...
A môžeme už na tom pracovať vlastne
Re: Yrobot
Takže budu předpokládat, že spojení plošek 1-2 u propojky S1 zajistí trvalé napájení IR LED snímačů na OPT modulu (i když to neodpovídá schématu). To zatím stačí, sonaru se můžeme věnovat někdy později. Rozhodně by bylo užitečné to spojení Ucc a středu S1 "propísknout" multimetrem.
Ke zprovoznění sledovače čáry nám pak chybí dva body (podle návrhu z 25.2.2015):
3. Otestovat funkčnost OPT modulu programem pro čtení stavu snímačů a signalizací stavu pomocí LED. [OPT modul je snad funkční, ale nemáme SW]
4. Doplnit signalizaci o reálné ovládání motorů Yrobota a zprovoznit základní algoritmus sledování čáry. [algoritmus navržen, ale chybí funkční čtení OPT modulu]
Pro bod 3. potřebujeme:
- rozumně nadefinovat vhodné názvy (VLEVO, UPROSTRED, VPRAVO, OPT_DDR)
- nastavit správně piny portu, na kterém je připojen OPT modul
- napsat funkci "cara_je(snimac)", která určí, jestli je pod daným snímačem čára, nebo ne
- použít výsledku funkce "cara_je" k signalizaci stavu snímačů pomocí LED na Yrobotu (nebo pomocí LED sedmisegmentovek na Yrobotu)
Názvy jsou jasné a můžeme je nadefinovat např. takto:
Pro správné nastavení pinů je třeba vědět, že pokud u AVR (atmega16) chceme nastavit pin jako vstupní, musíme příslušný pin jeho řídicího DDR registru nastavit na nulu. Přitom je vhodné nezměnit nastavení ostatních pinů řídicího registru. Toho lze dosáhnout používáním tzv. "přátelského kódu" ("friendly code"). Tento způsob využívá při přiřazování logické OR (|=), AND (&=) a negaci (~) pro opatrné a přesné ovládání jednotlivých bitů portu. Pokud tedy například chceme nastavit bit 1 registru OPT_DDR na nulu (a přitom zachovat nastavení ostatních bitů), tak použijeme zápis "OPT_DDR &= ~(0b00000010);" [bity se počítají zprava a od nuly, negace otočí hodnotu každého bitu a logické AND (&=) pak vynuluje jen ten bit, který je vpravo na nule, ostatní bity nechá bez změny]. Tento způsob zápisu je docela dobrý i proto, že je z něj jasné, který bit ovládáme (proto je tam ta negace). Dalším možným zápisem pro přehlednost je použití shift operátoru pro nastavení bitu podle jeho čísla, takže třeba zápis (1<<5) nastaví na jedničku 5. bit bytu (posune jedničku o 5 pozic vlevo, tedy výsledkem je 0b00100000). Místo čísla můžeme využít i definovaného nazvu, např. (1<<PA2) nastaví 2. bit bytu, protože PA2 je vlastně pojmenovaná "dvojka". Více bitů se nastavuje logickým OR (|). Třeba zápis (1<<0)|(1<<1) nastaví na jedničku bity 0 a 1, takže výsledkem je 0b00000011 (nebo v HEXA ... 0x03).
Jak tedy můžeme nastavit piny VLEVO, UPROSTRED a VPRAVO jako vstupní? To je "domácí úkol" pro zápis funkce "initOPT()":
Po nastavení směru pinů budeme moci pokročit k funkci na čtení stavu snímačů. Původně jsem myslel, že zkusíme začít jednodušším binárním čtením, ale řekl bych, že přesnější a zajímavější bude rovnou zkusit analogové čtení hodnoty pomocí interního ADC převodníku v atmega16 (protože na to máme dobré funkce z vnořené knihovny "yellow_robot"). Nejprve ale musíme mít rozumně napsaný ten "initOPT()".
Ke zprovoznění sledovače čáry nám pak chybí dva body (podle návrhu z 25.2.2015):
3. Otestovat funkčnost OPT modulu programem pro čtení stavu snímačů a signalizací stavu pomocí LED. [OPT modul je snad funkční, ale nemáme SW]
4. Doplnit signalizaci o reálné ovládání motorů Yrobota a zprovoznit základní algoritmus sledování čáry. [algoritmus navržen, ale chybí funkční čtení OPT modulu]
Pro bod 3. potřebujeme:
- rozumně nadefinovat vhodné názvy (VLEVO, UPROSTRED, VPRAVO, OPT_DDR)
- nastavit správně piny portu, na kterém je připojen OPT modul
- napsat funkci "cara_je(snimac)", která určí, jestli je pod daným snímačem čára, nebo ne
- použít výsledku funkce "cara_je" k signalizaci stavu snímačů pomocí LED na Yrobotu (nebo pomocí LED sedmisegmentovek na Yrobotu)
Názvy jsou jasné a můžeme je nadefinovat např. takto:
Kód: Vybrat vše
#include "yellow_robot.h" // vlozeni HAL knihovny pro abstrakci od HW Yrobota (tim ziskame i radu uzitecnych funkci)
#define VLEVO PA0 // OPT snimac vlevo (vstup, ADC0)
#define UPROSTRED PA1 // OPT snimac uprostred (vstup, ADC1)
#define VPRAVO PA2 // OPT snimac vpravo (vstup, ADC2)
#define OPT_PORT PORTA // OPT modul je na portu A
#define OPT_DDR DDRA // registr pro nastaveni smeru pinu pro OPT modul
Jak tedy můžeme nastavit piny VLEVO, UPROSTRED a VPRAVO jako vstupní? To je "domácí úkol" pro zápis funkce "initOPT()":
Kód: Vybrat vše
void initOPT() { // funkce pro inicializaci portu pro OPT modul
// v prislusnem DDR registru nastavime nuly na bitech pro vstupy (0,1 a 2)
}
Re: Yrobot
Ešte na začiatok...
V noci mi písal autor Yrobota alebo jeden z členov vývoja toho a poslal mi správne schémy a zapojenie senzora+sonara.
Môžeš si ich aj pozrieť
http://uloz.to/xctpUhJM/schemy-rar
Ešte mi doplnil krátkou vetou že:
Pre využitie senzorov+sonar treba využiť zapojenie 2&3
(vlastne sa to dá vyčítať zo schémy čo poslal)
Tak zas to prepajkovávam...
No už pracujem na tom čo si mi poslal...
Jedine kde sa sekám je že číslicovku som ešte na takéj urovni nepreberal preto budem troška hádať a ideálne by sa mi zdalo využiť toto: (1<<5/PA5)...
To v zátvorkách (0b00000010) je moc zložité či ?
V noci mi písal autor Yrobota alebo jeden z členov vývoja toho a poslal mi správne schémy a zapojenie senzora+sonara.
Môžeš si ich aj pozrieť
http://uloz.to/xctpUhJM/schemy-rar
Ešte mi doplnil krátkou vetou že:
Pre využitie senzorov+sonar treba využiť zapojenie 2&3
(vlastne sa to dá vyčítať zo schémy čo poslal)
Tak zas to prepajkovávam...
No už pracujem na tom čo si mi poslal...
Jedine kde sa sekám je že číslicovku som ešte na takéj urovni nepreberal preto budem troška hádať a ideálne by sa mi zdalo využiť toto: (1<<5/PA5)...
To v zátvorkách (0b00000010) je moc zložité či ?
Re: Yrobot
Díky za nové schéma. Pokud budu předpokládat, že je správné, tak v těch původních dokumentech bylo (a je) špatně nejen schéma, ale i popis propojení. To je "fascinující" (ostudné). Přesto tu pořád dokola budu opakovat, že nejlepší je vždycky to "propísknout" multimetrem. Pro jistotu.
Jinak ohledně toho "domácího úkolu" Ti moc nerozumím, protože očekávám jen jediný řádek programu s příkazem pro nastavení portu A tak, jak je popsáno v komentáři (způsobů řešení i zápisu je celá řada a je mi jedno, jaký použiješ, hlavně abys věděl co děláš a proč).
Nevím, co si mám představit pod Tvým slovem "číslicovka", ale pokud "sedmisegmentovku", tak tu zatím můžeme nechat až na další krok. Pokud tím slovem ale myslíš "číslicovou techniku" obecně, tak jsem mimo a tvůj "slang" asi nikdy nepochopím.
Jinak ohledně toho "domácího úkolu" Ti moc nerozumím, protože očekávám jen jediný řádek programu s příkazem pro nastavení portu A tak, jak je popsáno v komentáři (způsobů řešení i zápisu je celá řada a je mi jedno, jaký použiješ, hlavně abys věděl co děláš a proč).
Nevím, co si mám představit pod Tvým slovem "číslicovka", ale pokud "sedmisegmentovku", tak tu zatím můžeme nechat až na další krok. Pokud tím slovem ale myslíš "číslicovou techniku" obecně, tak jsem mimo a tvůj "slang" asi nikdy nepochopím.
Re: Yrobot
Ahoj...
Tak prepajkoval som to pokračujeme.
10.3.2015 Idem na "Školenie kde budú preberať tento projekt Yrobot"
Ak by si chcel niečo vedieť ohľadom tohto robotíčka stačí povedať
Tu je dúfam to čo si myslel že mám spraviť:
Dúfam že to je dobre!
Nič iné ma nenapadá ako ich zapnúť teda myslím že to je správne. Alebo ak máš lepší nápad stačí povedať.
Číslicová technika=Číslicovka
To je to čo za zaoberá obvodami Xor,Nand a pod. vlastne to čo si mi opisoval...
Môj slang... no tak snažím sa dúfam že nemáš problémy to nie jak pochopiť... ?
Tiež si občas hovorím teda hlavne ak čítam niečo od teba tak si to prečítam aj 10x kým mi to dopne ale to preto že som v tom nový a ešte sa len začínam orientovať v tom...
Tak prepajkoval som to pokračujeme.
10.3.2015 Idem na "Školenie kde budú preberať tento projekt Yrobot"
Ak by si chcel niečo vedieť ohľadom tohto robotíčka stačí povedať
Tu je dúfam to čo si myslel že mám spraviť:
Kód: Vybrat vše
void initOPT(void) { // void znamena neco jako "nic" (tato funkce tedy nevraci zadnou navratovou hodnotu)
// zatim ta funkce nedela vubec nic, ale pozdeji bude inicializovat porty a piny pro modul OPT
DDRA = (1<<PA0)|(1<<PA1)|(1<<PA2);
PORTA&=~(1<<PA0)|(1<<PA1)|(1<<PA2);
}
Nič iné ma nenapadá ako ich zapnúť teda myslím že to je správne. Alebo ak máš lepší nápad stačí povedať.
Číslicová technika=Číslicovka
To je to čo za zaoberá obvodami Xor,Nand a pod. vlastne to čo si mi opisoval...
Môj slang... no tak snažím sa dúfam že nemáš problémy to nie jak pochopiť... ?
Tiež si občas hovorím teda hlavne ak čítam niečo od teba tak si to prečítam aj 10x kým mi to dopne ale to preto že som v tom nový a ešte sa len začínam orientovať v tom...
Re: Yrobot
No, bohužel, podle mne to správně není. Takže prosím, zkus popsat, proč jsi to napsal zrovna takto (tedy co by to mělo dělat a proč).
Re: Yrobot
Ejha nieje ?
No napadlo ma to kedže pri LEDkách čo som robil 1x som na začiatok písal niečo podobné a chápem to takto:
Aby bolo možné používať senzory. Porty PA0-3 musíme nastaviť ako výstupné piny. Tak som rátal z tým že to je ono...
Možno že som spravil chybu v názvoch DDRA/PORTA tam malo byť asi OPT_DDR / OPT_PORT všimol som si to v #define...
Ak už tam nie tak by sa mi asi mozog rozpadol kým by som na to prišiel...
Možno jeden z týchto napadov je správne:
No napadlo ma to kedže pri LEDkách čo som robil 1x som na začiatok písal niečo podobné a chápem to takto:
Aby bolo možné používať senzory. Porty PA0-3 musíme nastaviť ako výstupné piny. Tak som rátal z tým že to je ono...
Možno že som spravil chybu v názvoch DDRA/PORTA tam malo byť asi OPT_DDR / OPT_PORT všimol som si to v #define...
Ak už tam nie tak by sa mi asi mozog rozpadol kým by som na to prišiel...
Možno jeden z týchto napadov je správne:
Kód: Vybrat vše
void initOPT(void) { // void znamena neco jako "nic" (tato funkce tedy nevraci zadnou navratovou hodnotu)
// zatim ta funkce nedela vubec nic, ale pozdeji bude inicializovat porty a piny pro modul OPT
OPT_DDR = (1<<PA0)|(1<<PA1)|(1<<PA2);
OPT_PORT&=~(1<<PA0)|(1<<PA1)|(1<<PA2);
alebo
OPT_DDR = (1<<PA0)|(1<<PA1)|(1<<PA2);
OPT_PORT&=~0xFF;
}
Re: Yrobot
Jdeš na to docela rozumně, ale děláš chybu v základní úvaze o nastavení pinů pro senzory. Na rozdíl od LED, je třeba tyto piny nastavit jako vstupní a to se dělá tak, že příslušné piny DDR registru se nastaví na nulu (nikoliv na jedničku jako ve všech Tvých pokusech). Napsal jsem to i do komentáře svojí "novější verze" té kostry funkce initOPT(). Musíš opravdu důkladně chápat cíl, jakého potřebuješ dosáhnout. Použití názvu OPT_DDR je lepší, ale spokojil bych se i s DDRA.
Samotné nastavení portu A (OPT_PORT nebo PORTA) má u vstupních pinů jen ten efekt, že nastavení na jedničky "1" by aktivovalo interní pull-up odpory, což pro účely IR senzorů není žádoucí. Doufám, že implicitní hodnota je "0", takže nastavení PORTA snad můžeme úplně vynechat (stačí nastavit DDRA).
Přesto ještě nechám na Tobě, abys našel použitelný způsob zápisu pro "vynulování" těch pinů pro snímače čáry. Napiš to tak, aby Ti to připadalo jednoduché a srozumitelné (je třeba vynulovat piny 0,1 a 2 DDRA, ale zbytek pinů DDRA je třeba nechat bez změny). Zkus si ještě jednou přečíst můj příspěvek z 5.3.2015 ve 20:29 (nebo třeba ty informace najdi a pochop někde jinde na internetu).
Uznávám, že pro začátečníka je to těžké, ale je to klíčové, a pak už to snad půjde snáze.
Samotné nastavení portu A (OPT_PORT nebo PORTA) má u vstupních pinů jen ten efekt, že nastavení na jedničky "1" by aktivovalo interní pull-up odpory, což pro účely IR senzorů není žádoucí. Doufám, že implicitní hodnota je "0", takže nastavení PORTA snad můžeme úplně vynechat (stačí nastavit DDRA).
Přesto ještě nechám na Tobě, abys našel použitelný způsob zápisu pro "vynulování" těch pinů pro snímače čáry. Napiš to tak, aby Ti to připadalo jednoduché a srozumitelné (je třeba vynulovat piny 0,1 a 2 DDRA, ale zbytek pinů DDRA je třeba nechat bez změny). Zkus si ještě jednou přečíst můj příspěvek z 5.3.2015 ve 20:29 (nebo třeba ty informace najdi a pochop někde jinde na internetu).
Kód: Vybrat vše
void initOPT() { // funkce pro inicializaci portu pro OPT modul
// v prislusnem DDR registru nastavime nuly na bitech pro vstupy (0, 1 a 2)
}