Archiv verlassen und diese Seite im Standarddesign anzeigen : Drehencoder von Pollin
Johannes G.
19.01.2007, 12:44
Hallo,
ich habe mir bei Pollin mal ein paar solche Teile mitbestellt: http://www.pollin.de/shop/shop.php?cf=detail.php&pg=OA==&a=Njg2OTU3OTk=&w=NDk3OTk4&ts=0
Weiß jemand ob und wie man die mit einem AVR benutzen kann?
Ich habe leider kein Oszi um mir das Protokoll genauer anzuschauen...
Viele Grüße,
Johannes
Ich kenn diese Teile zwar nicht, aber eventuell geht es. Und wenn nicht: das Teil ist nicht soo teuer.
jon
Johannes G.
19.01.2007, 13:32
Hallo,
gehen tut es bestimmt.. Nur wie ;)
Viele Grüße,
Johannes
Wirf doch einfach mal nen Blick ins Datenblatt, da steht drin was das Ding für Signale ausgibt.
Andree-HB
19.01.2007, 13:51
Schaue mal hier :
https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=19220&highlight=drehencoder
.. Drehcoder haben keine Füße, die gehen nicht :-)
Sie funktionieren immer so, daß an zwei Pins ein zeitversetztes bzw. durch Drehung versetztes Signal rauskommt .. die Reihenfolge gibt die Drehrichtung an - also ein Pin auf Interrupt legen, wenn Interrupt, dann beide Pins auslesen, somit ist in einem Fall einer High oder eben beide, ja nach Drehrichtung .. und gut ... da das Pollinteil noch eine Taste hat, sinds folglich 5 Pins .. ggf. mußt DU noch softwaretechnisch die Tasten entprellen .. und gut is ...
Johannes G.
19.01.2007, 14:11
Andree-HB, danke für den Link ;)
Hat das schonmal jemand mit C versucht?
Viele Grüße,
Johannes
Hallo!
Ich habe bisher immer ein Scrollrad aus einer billigster Maus ausgeschlachtet. Das hat aber nur 3 Pins und die Grösse von einem Trimmpoti.
Wie gross ist eigentlich der Drehcoder vom Pollin ?
MfG
http://www.pollin.de/shop/shop.php?cf=detail.php&pg=OA==&a=Njg2OTU3OTk=&w=NDk3OTk4&ts=0
16,5 x 17 x 21,5 mm
Johannes G.
19.01.2007, 14:51
Hallo,
PICture: 16x16x30mm ;)
Hallo!
Vielen Dank für so schnelle Antworten !!! :)
Dann muss ich bei dem Mausrädchen bleiben (Durchmesser 10mm, Höhe 5mm).
MfG
16,5 x 17 x 21,5 mm
16x16x30mm ;)
Wie kommt ihr beiden auf unterschiedliche Größen??
jon
Johannes G.
19.01.2007, 15:56
Ich habe nachgemessen ;)
Und die Höhe hab ich mit den Pins gemessen...
Hallo,
ich habe mir bei Pollin mal ein paar solche Teile mitbestellt: http://www.pollin.de/shop/shop.php?cf=detail.php&pg=OA==&a=Njg2OTU3OTk=&w=NDk3OTk4&ts=0
Weiß jemand ob und wie man die mit einem AVR benutzen kann?
Ich habe leider kein Oszi um mir das Protokoll genauer anzuschauen...
Viele Grüße,
Johannes
Kurze antwort:
Ja,die funktionieren genau wie alle anderen auch.
Ich hab mir letztes Jahr welche geholt und verbaut.
Die sind aber für spezielle Knöpfe gebaut so das du keine normalen anbringen kannst.
Ich hab gerade einen eingebaut und in AVR-GCC programmiert. Der A-Kanal an einem externen Interrupt, der B-Kanal und der Taster auf normalen Eingängen des AVRs.
Das wesentliche läuft in der ISR ab:
ISR(INT1_vect)
{
if bit_is_clear(PIND,PIND3) //falling edge!
{
if bit_is_clear(PINC,encoder_pin) //linksrum
{
enc--;
enc_minus();
}
else
{
enc++;
enc_plus();
}
}
else //rising edge
{
if bit_is_clear(PINC,encoder_pin) //rechtsrum
{
enc++;
enc_plus();
}
else
{
enc--;
enc_minus();
}
}
}
Der Interrupt wird so eingestellt, dass er auf fallende und stegende Flanke auslöst:
//int1 (encoder): both edges
MCUCR|=(1<<ISC10);
Denn nur bei jedem zweiten Schritt gibt es eine fallende (bzw eine steigende) Flanke. In der ISR wird dann geprüft, welche Flanke nun gerade erkannt wurde.
Die ganze Pina als Eingänge mit Pullups einzustellen und das Auswerten des Tasters überlasse ich euch!
Und für die Bascom-Fetischisten auch was einfaches zum Testen.
'Kleines Testprogramm für Encoder
'Verwendetes LCD hat 2x24 Zeichen
'Die beiden Leitungen sind mit ca. 200 Ohm als Pullup nach vcc gelegt
'Die Controllerpullups taugen hier nicht viel.
'Wegen der direkten Abfrage und gleichzeitigen LCD-Ausgabe
'ist die maximale erfassbare Geschwindigkeit recht gering.
'Je weniger das LCD genutzt wird desto höher kann man gehen.
'In der Praxis wäre aber ein Interruptbetrieb oder gleich ein externer Zähler Sinvoller.
'Als Demo zum Spielen reicht das aber erstmal aus.
'Gruß Ratber Roboternetz.de 2006
'PS: das ist wärend einer Ziggarette geschrieben also keine Wunder oder sowas erwarten. ;)
$regfile = "m8def.dat"
$crystal = 8000000
$baud = 300
$hwstack = 64
$swstack = 30
$framesize = 120
Dim A As Byte
Dim B As Byte
Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.0 , Db7 = Portc.1 , E = Portd.7 , Rs = Portb.0
Config Lcd = 24 * 2
Initlcd
Cls
Cursor Off
Config Pind.5 = Input
Config Pind.6 = Input
Cls
Locate 1 , 1
Lcd "Encoder test"
A = 100 'irgendein Startwert
Locate 2 , 1
Lcd A
Main:
B = Encoder(pind.6 , Pind.5 , Rechts , Links , 1)
Goto Main
Links:
Decr A
Locate 1 , 14
Lcd B
Locate 2 , 1
Lcd A ; " Links "
Return
Rechts:
Incr A
Locate 1 , 14
Lcd B
Locate 2 , 1
Lcd A ; " Rechts "
Return
End
Nix weltbewegendes aber zum Ausprobieren reicht es ja.
Ich hab sowas in Codevision für 2 Interrupts gemacht und den ATMEGA32. Läuft somit Quasi im Hintergrund.
Die Routine zählt zu einem Wert (li_frequ) entweder eine Variable (ui_increments) dazu oder zieht sie ab, je nach Drehrichtung.
Die Routine ist für einen optischen Drehencoder und hat deshalb keine Entprellung!
/* Called automaticly on INT 0 */
interrupt [2] void int0(void) {
unsigned char uc_port=0,uc_mcucr=0;
uc_port=PIND&0b00001000;
uc_mcucr=MCUCR&0b00000001;
if(uc_mcucr==0)
{
if (uc_port==8){
li_frequ=li_frequ+ui_increments;
}
else{
li_frequ=li_frequ-ui_increments;
}
MCUCR=MCUCR|0b00000011;
}
else{
if (uc_port==8){
li_frequ=li_frequ-ui_increments;
}
else{
li_frequ=li_frequ+ui_increments;
}
MCUCR=MCUCR&0b11111110;
}
refresh=1;
}
/* Called automaticly on INT 1 */
interrupt [3] void int1(void) {
unsigned char uc_port=0,uc_mcucr=0;
uc_port=PIND&0b00000100;
uc_mcucr=MCUCR&0b00000100;
if(uc_mcucr==0)
{
if (uc_port==4){
li_frequ=li_frequ-ui_increments;
}
else{
li_frequ=li_frequ+ui_increments;
}
MCUCR=MCUCR|0b00001100;
}
else{
if (uc_port==4){
li_frequ=li_frequ+ui_increments;
}
else{
li_frequ=li_frequ-ui_increments;
}
MCUCR=MCUCR&0b11111011;
}
refresh=1;
}
... und beachtet, daß nicht jeder INT auch beide Flanken auswerten kann -> Prozessorhandbuch ;-)
Johannes G.
20.01.2007, 11:02
uwegw, danke für den Code ;)
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.