This is an old revision of the document!
Vajalikud teadmised: [HW] Mootorite moodul, [HW] LCD moodul, [AVR] Sisendid-väljundid, [AVR] AVR katkestused, [AVR] AVR loendurid, [LIB] Mootorite teek, [LIB] Koodrite teek, [LIB] Alfabeetilise LCD teek, [LIB] Viite teek, [PRT] Perioodiline katkestus
// // Kodulabori Hall'i efektiga koodri demonstratsioon. // LCD-le kuvatakse mootori reduktori pöörete arv. // #include <stdio.h> #include <avr/interrupt.h> #include <homelab/module/lcd_alpha.h> #include <homelab/module/motors.h> #include <homelab/module/encoders.h> #include <homelab/delay.h> // // Mootori parameetrid // #define TICKS_PER_TURN 3 #define GEAR_RATIO 47 // // Põhiprogramm // int main(void) { unsigned short rpm; char text[16]; // LCD ekraani seadistamine lcd_alpha_init(LCD_ALPHA_DISP_ON); // LCD ekraani puhastamine lcd_alpha_clear(); // Programmi nimi lcd_alpha_write_string("Enkooder"); // Mootori 0 seadistamine dcmotor_init(0); // Koodri 0 seadistamine encoder_init(0); // Mootori käivitamine dcmotor_drive(0, 1); // Globaalne katkestuste lubane (koodri pärast) sei(); // Lõputu tsükkel while (true) { // Reduktori võlli rpm leidmine rpm = encoder_get_rpm(0) / TICKS_PER_TURN / GEAR_RATIO; // rpm teisendamine tekstiks sprintf(text, "%d rpm ", rpm); // Teksti kuvamine LCD teise rea alguses lcd_alpha_goto_xy(0, 1); lcd_alpha_write_string(text); // Paus 500 millisekundit sw_delay_ms(500); } }