- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 19 von 19

Thema: Drehencoder von Pollin

  1. #11
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    72
    Beiträge
    11.077
    Anzeige

    Praxistest und DIY Projekte
    Hallo!

    Vielen Dank für so schnelle Antworten !!!

    Dann muss ich bei dem Mausrädchen bleiben (Durchmesser 10mm, Höhe 5mm).

    MfG

  2. #12
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    29.12.2005
    Ort
    Nähe Mainz
    Alter
    32
    Beiträge
    3.467
    Zitat Zitat von Manf
    16,5 x 17 x 21,5 mm
    Zitat Zitat von Johannes G.
    16x16x30mm
    Wie kommt ihr beiden auf unterschiedliche Größen??

    jon
    Nice to be back after two years
    www.roboterfreak.de

  3. #13
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    20.08.2006
    Beiträge
    280
    Ich habe nachgemessen
    Und die Höhe hab ich mit den Pins gemessen...

  4. #14
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.09.2004
    Ort
    Düsseldorf
    Beiträge
    3.948

    Re: Drehencoder von Pollin

    Zitat Zitat von Johannes G.
    Hallo,

    ich habe mir bei Pollin mal ein paar solche Teile mitbestellt: http://www.pollin.de/shop/shop.php?c...=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.
    Gruß
    Ratber

  5. #15
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.02.2005
    Ort
    Hamburg
    Alter
    37
    Beiträge
    4.255
    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:
    Code:
    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:
    Code:
    	//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!

  6. #16
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.09.2004
    Ort
    Düsseldorf
    Beiträge
    3.948
    Und für die Bascom-Fetischisten auch was einfaches zum Testen.

    Code:
    '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.
    Gruß
    Ratber

  7. #17
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    2.188
    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!

    Code:
    /* 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;
    }

  8. #18
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    02.09.2005
    Ort
    Osnabrücker Land
    Alter
    62
    Beiträge
    534
    ... und beachtet, daß nicht jeder INT auch beide Flanken auswerten kann -> Prozessorhandbuch
    Ich kann mir keine Signatur leisten - bin selbständig!

  9. #19
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    20.08.2006
    Beiträge
    280
    uwegw, danke für den Code

Seite 2 von 2 ErsteErste 12

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad