| ??? 05/28/04 04:19 Read: times |
#71374 - RE: Rotary encoder problems Responding to: ???'s previous message |
Thanks very much for the detailed answer. I'll have a look at that for my next project that involves a non-detented encoder. The current project (that I wrote the original code for) is mostly a "test" project...
When I looked at the timing diagram of the encoder I also came up with another idea, and I changed my code to the code below. void Button(void) interrupt 0 //Extern 2 - INT0
{
IE = 0;
if (BUT2 == 0) //Encoder
{
TH1 = TL1 = 0; //Reset timeout timer
TR1 = 1; //Start timeout timer
while((BUT2 == 0) && (TH1 < 0xf0));
//Wait for end of pulse with timeout
TR1 = 0; //Stop timeout timer
if (TH1 < 0xf0) //No timeout
{
if (ENC0 == 0) //Vol+
{
if (vol < 63)
{
vol++;
writespi(1);
}
}
else //Vol-
{
if (vol > 0)
{
vol--;
writespi(1);
}
}
}
}
That code seems to work well. I haven't had a single error yet. But I guess the problems wont show up until the encoder get's worn... Best regards, Mikkel C. Simonsen |
| Topic | Author | Date |
| Rotary encoder problems | 01/01/70 00:00 | |
| RE: Rotary encoder problems | 01/01/70 00:00 | |
| RE: Rotary encoder problems | 01/01/70 00:00 | |
| RE: Rotary encoder problems | 01/01/70 00:00 | |
| RE: Rotary encoder problems | 01/01/70 00:00 | |
| RE: Rotary encoder problems | 01/01/70 00:00 | |
| RE: Rotary encoder problems | 01/01/70 00:00 | |
RE: Rotary encoder problems | 01/01/70 00:00 | |
| RE: Rotary encoder problems | 01/01/70 00:00 | |
| RE: Rotary encoder problems | 01/01/70 00:00 | |
| RE: Rotary encoder problems | 01/01/70 00:00 |



