This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
| et:competition:cart:software [2012/04/10 18:01] – tekitatud raivo.sell | et:competition:cart:software [2020/07/20 09:00] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ====== Tarkvaranäide ====== | ====== Tarkvaranäide ====== | ||
| + | |||
| + | Järgnev näide ei kasuta Kodulabori teegi alalisvoolu mootorite kiiruse juhtimise teeki, vaid on tehtud riistvaralise PWM väljundi peale, mis on Mootori moodulil ühendatud servo pistikutesse. | ||
| + | |||
| + | |||
| + | ====== Lihtsustatud näide ====== | ||
| + | Lihtsustatud näide suunab UH anduri lugemi otse mootori kiiruseks. | ||
| + | |||
| + | {{: | ||
| + | |||
| + | <code c> | ||
| + | // | ||
| + | // Vajalik riistvara: | ||
| + | // 1. Kodulabori kontrollermoodul ATmega2561 | ||
| + | // 3. Kodulabori mootorite moodul ja andurite moodul või Kombo moodul | ||
| + | // 4. UH andur | ||
| + | // 5. Alalisvoolumootor | ||
| + | // | ||
| + | // Kirjeldus: | ||
| + | // Programm seadistab riistvaralise PWM-i kasutama servopistikuid. Ultraheli anduri näit antakse otse | ||
| + | // mootori kiiruseks. Kiiruse vahemik 0-255 | ||
| + | // | ||
| + | // Kasutamine: | ||
| + | // Ühenda moodulid kokku. Ühenda UH andur Viiku ADC3 / PF3 | ||
| + | // Ühenda mootori maa Servo pistiku GND viiguga ja mootori juhtkaabel servo pistiku signaali viiguga. | ||
| + | // Servo pistiku keskmine viik (+5 V) jääb ühendamata. | ||
| + | // | ||
| + | // Autor: Heiko Pikner, Raivo Sell | ||
| + | // | ||
| + | // Compiler: AVR-GCC | ||
| + | // Chip type: Atmega2561 | ||
| + | // | ||
| + | //#include < | ||
| + | #include " | ||
| + | #include " | ||
| + | #include < | ||
| + | |||
| + | #define PWM_PERIOD | ||
| + | |||
| + | // Kasutusel servopistik. Protsessori viigud PB5 ja PB6 | ||
| + | static pin servo_pins[2] = | ||
| + | { | ||
| + | PIN(B, 5), PIN(B, 6) | ||
| + | }; | ||
| + | |||
| + | void hv_pwm_init(unsigned char index) | ||
| + | { | ||
| + | // Seadista PWM viik väljundiks. | ||
| + | pin_setup_output(servo_pins[index]); | ||
| + | |||
| + | // Seadista timeri kontrollregister | ||
| + | // Clear OUTA and OUTB on compare match | ||
| + | // Fast PWM mode with ICR = TOP | ||
| + | // Prescaler 8 | ||
| + | timer1_init_fast_pwm( | ||
| + | TIMER1_PRESCALE_8, | ||
| + | TIMER1_FAST_PWM_TOP_ICR, | ||
| + | TIMER1_FAST_PWM_OUTPUT_CLEAR_ON_MATCH, | ||
| + | TIMER1_FAST_PWM_OUTPUT_CLEAR_ON_MATCH, | ||
| + | TIMER1_FAST_PWM_OUTPUT_DISABLE); | ||
| + | |||
| + | // TOP period | ||
| + | timer1_set_input_capture_value(PWM_PERIOD); | ||
| + | } | ||
| + | |||
| + | |||
| + | // | ||
| + | // PWM väärtuse muutmine | ||
| + | // index - Servo pins 0-1. | ||
| + | // position 0-255. PWM value. | ||
| + | // | ||
| + | void hv_pwm_value(unsigned char index, unsigned int value) | ||
| + | { | ||
| + | switch (index) | ||
| + | { | ||
| + | case 0: | ||
| + | |||
| + | timer1_set_compare_match_unitA_value(value); | ||
| + | if(OCR1A == 0) | ||
| + | { | ||
| + | DDRB &= ~(1 << DDB5); | ||
| + | } | ||
| + | else | ||
| + | { | ||
| + | DDRB |= (1 << DDB5); | ||
| + | } | ||
| + | |||
| + | |||
| + | break; | ||
| + | |||
| + | case 1: | ||
| + | timer1_set_compare_match_unitB_value(value); | ||
| + | if(OCR1B == 0) | ||
| + | { | ||
| + | DDRB &= ~(1 << DDB6); | ||
| + | } | ||
| + | else | ||
| + | { | ||
| + | DDRB |= (1 << DDB6); | ||
| + | } | ||
| + | |||
| + | break; | ||
| + | } | ||
| + | } | ||
| + | |||
| + | // | ||
| + | // Põhiprogramm | ||
| + | // | ||
| + | int main(void) | ||
| + | { | ||
| + | // UH anduri viik | ||
| + | pin pin_trigger_echo = PIN(F, 3); | ||
| + | // Anduriplaadi väliste andurite viik | ||
| + | pin sensors = PIN(G, 0); | ||
| + | pin_setup_output(sensors); | ||
| + | pin_set(sensors); | ||
| + | // Mootori seadistamine | ||
| + | hv_pwm_init(0); | ||
| + | |||
| + | // Lõputu tsükkel | ||
| + | while (true) | ||
| + | { | ||
| + | // UH anduri mõõtetulemuse (cm) suunamine mootori kiiruseks (0-255) | ||
| + | // | ||
| + | hv_pwm_value(0, | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | ====== Keerukam näide ====== | ||
| + | |||
| + | Failid pakituna projektiks: | ||
| + | * {{: | ||
| + | ===== Peaprogramm - main.c ===== | ||
| + | |||
| + | |||
| <code c> | <code c> | ||
| Line 23: | Line 163: | ||
| // Autor: Heiko Pikner | // Autor: Heiko Pikner | ||
| // | // | ||
| - | // Compiler :AVR-GCC | + | // Compiler: AVR-GCC |
| - | // Chip type : | + | // Chip type: Atmega2561 |
| // | // | ||
| Line 38: | Line 178: | ||
| // UH anduri viik | // UH anduri viik | ||
| pin pin_trigger_echo = PIN(F, 2); | pin pin_trigger_echo = PIN(F, 2); | ||
| + | pin sensors = PIN(G, 0); | ||
| // LEDide viigud | // LEDide viigud | ||
| Line 68: | Line 208: | ||
| pin_setup_output(led_yellow); | pin_setup_output(led_yellow); | ||
| pin_setup_output(led_green); | pin_setup_output(led_green); | ||
| + | // Anduriplaat välistele anduritele | ||
| + | pin_setup_output(sensors); | ||
| + | pin_set(sensors); | ||
| // Seab nupud töökorda | // Seab nupud töökorda | ||
| Line 179: | Line 322: | ||
| - | ====== PWM Teek ====== | + | ===== PWM Teek - HvPWM.c |
| <code c> | <code c> | ||
| Line 284: | Line 427: | ||
| </ | </ | ||
| - | ====== PWM teegi päisfail | + | ===== PWM teegi päisfail |
| <code c> | <code c> | ||
| #ifndef HVPWM_H | #ifndef HVPWM_H | ||
| Line 303: | Line 446: | ||
| </ | </ | ||
| - | |||