Rotary Encoder üzerinde bir tekerlek bulunan bu tekerleğin dönüşüne bağlı olarak çıkışında sinyal veren bir elektronik elemandır. Genelde 3 ucu vardır. Enkoderin Orta Ucunu GND ye diğer uçlarını GPIOA_0 ve GPIOA_1 e bağlayarak ledler üzerindeki değişimi Gözlemleyeceğiz. Bazılarında bu işlevein yanısıra bir adet de buton bulunur (Başlığa basınca çalışır.) Standart bir enkoderin çıkışı aşağıdaki gibidir.
Eğer elinizde denemek için bir enkoderiniz yoksa bir mousen tekerleğini sökerek deneme yapabilirsiniz. Mouse bozmanıza gerek yok, ozaman yeni bir enkoder alın. Birçok açıklamayı kodların içerisinde yaptım. Muhtemelen size daha çok yardımcı olacaktır.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
//-------------------------------------------------------------- // File : main.c // Datum : 23.07.2013 // Version : 1.0 // Autor : UB // EMail : mc-4u(@)t-online.de // Web : www.mikrocontroller-4u.de // CPU : STM32F4 // IDE : CooCox CoIDE 1.7.0 // Module : CMSIS_BOOT, M4_CMSIS_CORE // Funktion : Demo der Encoder Library // Hinweis : Diese zwei Files muessen auf 8MHz stehen // "cmsis_boot/stm32f4xx.h" // "cmsis_boot/system_stm32f4xx.c" //-------------------------------------------------------------- #include "main.h" #include "stm32_ub_led.h" #include "stm32_ub_encoder_tim2.h" int main(void) { uint16_t counterwert; SystemInit(); //168 Mhz // init aller LEDs UB_Led_Init(); UB_ENCODER_TIM2_Init( ENC_T2_MODE_2A, ENC_T2_TYP_NORMAL, 0x000F); /* * ENC_T2_MODE_2A olursa Yükselen Kenar da sayar * ENC_T2_MODE_2B olursa Düşen Kenarda Sayar * ENC_T2_MODE_4AB olursa Hem Yükselen Kenarda Hem Düşen Kenarda Sayar * * ENC_T2_TYP_NORMAL da Yukarı sayar * ENC_T2_TYP_REVERS aşağı sayar * * 0x000F max sayım değeridir * */ while(1) { //Değere Göre Ledleri Yakıyor. counterwert=UB_ENCODER_TIM2_ReadPos(); /* * Read Pos fonksiyonu TIMx->CNT degerini getiriyor. * Eğer Saymaya biryerden Başlamak isterseniz Bu değeri değitirebilirsiniz */ if((counterwert&0x01)==0) UB_Led_Off(LED_GREEN); else UB_Led_On(LED_GREEN); if((counterwert&0x02)==0) UB_Led_Off(LED_BLUE); else UB_Led_On(LED_BLUE); if((counterwert&0x04)==0) UB_Led_Off(LED_RED); else UB_Led_On(LED_RED); if((counterwert&0x08)==0) UB_Led_Off(LED_ORANGE); else UB_Led_On(LED_ORANGE); } } |
projenin tamamı için tıklayınız