Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 3 lip 2026, o 17:19


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 
Autor Wiadomość
PostNapisane: 29 sty 2017, o 18:17 
Offline
Nowy

Dołączył(a): 26 maja 2015
Posty: 7
Pomógł: 0

Witam. Mam problem z enkoderem, dopiero zaczynam i wykonuje wszystko jak na filmach p. Mirka o enkoderach. Utknąłem w części 4 poradnika, mam enkoder pół-krokowy, i pomimo wpisania odpowiedniego kodu, na wyświetlaczu enkoder dodaje "1" co drugi przeskok. Czy ktoś wie, dlaczego tak się dzieje? Wszystkie połączenia zrealizowałem jak na filmie, schemat połączenia ten "lepszy". Z góry dziękuje za pomoc :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 sty 2017, o 18:26 
Offline
Użytkownik

Dołączył(a): 02 gru 2015
Posty: 568
Pomógł: 28

a w bibliotece przestawiłeś HALF_STEP na 1.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 sty 2017, o 19:11 
Offline
Nowy

Dołączył(a): 26 maja 2015
Posty: 7
Pomógł: 0

Kod:
/*
 * main.c
 *
 *  Created on: 29 sty 2017
 *      Author: Michal
 */

#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include <util/delay.h>
#include <string.h>

#include "LCD/lcd44780.h"

volatile int encoder;

int main(void){

   DDRA |= (1<<PA7);
   PORTA |= (1<<PA7);

   PORTD |= (1<<PD2);
   PORTD |= (1<<PD3);


   GICR |= (1<<INT0);

   MCUCR |= (1<<ISC00);


   lcd_init();
   lcd_cls();
   lcd_str("start...");
   _delay_ms(500);

   sei();

   while(1){


      lcd_locate(1,0);
      lcd_str("enc: ");
      lcd_int ( encoder );
      lcd_str("   ");



   }



}


ISR( INT0_vect){


//   if(PIND & (1<<PD3)) encoder++;
//   else encoder--;

   static uint8_t dir;

   if(!(PIND & (1<<PD2))){
      dir = ( PIND & (1<<PD3));
   }else{
      if( dir != (PIND & (1<<PD3))){
         if(dir) encoder++;
         else encoder--;
      }
   }


//   if(PIND & (1<<PD3)){
//      if(PIND & (1<<PD2)){ encoder--;}
//      else{encoder++;}
//
//
//   }
//
//   if(PIND & (1<<PD2)){
//         if(PIND & (1<<PD3)){ encoder--;}
//         else{encoder++;}
//
//   }
}

To jest kod z jakiego korzystam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 sty 2017, o 12:06 
Offline
Moderator zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 18 lip 2012
Posty: 3230
Lokalizacja: Kraków - obok FAB5 ATMEL'a
Pomógł: 91

topic7402.html

_________________
http://www.jaglarz.info



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 sty 2017, o 20:56 
Offline
Użytkownik

Dołączył(a): 02 gru 2015
Posty: 568
Pomógł: 28

Więc nie robisz wszystkiego jak w poradnikach Mirka.
Cytuj:
Witam. Mam problem z enkoderem, dopiero zaczynam i wykonuje wszystko jak na filmach p. Mirka o enkoderach.

Obejrzyj te poradnikihttps://www.youtube.com/watch?v=IP5t_XzfRRM tam Mirek pisze na wizji gotową bibliotekę i tłumaczy co i jak wystarczy się trochę zaangażować i pisać z Mirkiem gwarantuje ci że jego biblioteka działa pięknie.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 6 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO