mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Drehencoder für Anfänger


Autor: Sven B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo liebes Forum.

Ich habe vor, einen Drehencoder STEC11B03 an den Atmega32 
anzuschliessen.
Es gibt bereits viele aufschlussreiche Beiträge im Forum zu diesem Thema
(Natürlich auch vom AVR-Meister peter dannegger) jedoch sind diese eher 
für
Fortgeschrittene und Profis.
Mein Problem: Wie wird der Encoder eingentlich angeschlossen (Pull-ups / 
Entprellung )???
Im Datenblatt finde ich keinen Anschlussplan...

Könnte mich jemand aufklären???

Liebe Grüße

Autor: Klaus2 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...willst du uns veräppeln? Schau mal ganz genau ins Datenblatt vom 
großen C, Seite 4!!!

Klaus.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sven B. wrote:

> Es gibt bereits viele aufschlussreiche Beiträge im Forum zu diesem Thema
> (Natürlich auch vom AVR-Meister peter dannegger) jedoch sind diese eher
> für
> Fortgeschrittene und Profis.

???
Meinst Du damit, Anfänger dürfen nur schlecht funktionierenden Code 
benutzen?



> Mein Problem: Wie wird der Encoder eingentlich angeschlossen (Pull-ups /
> Entprellung )???

Pullups oder interne Pullups des MC.
HW-Entprellung nein, stört sonst die SW-Entprellung.


> Im Datenblatt finde ich keinen Anschlussplan...

Einfach auf 2 LEDs legen und langsam drehen. Ändern sich beide Signale 
mal gleichzeitig, ists falsch. Es gibt nur 3 Anschlußmöglichkeiten.


Peter

Autor: Sven B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Peter.
Danke für Deine Antwort.

Wäre diese Beschaltung (s. Anhang) richtig ?

Irgendwie tue ich mich schwer damit...


P.S. Nein Klaus, ich möchte hier niemanden veräppeln. Ich suche nur 
etwas Unterstützung. Du bist sicherlich auch nicht als Profi auf die 
Welt gekommen.


Liebe Grüße

Autor: Sven B. (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Der Anhang...

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Pull-Up-Widerstände beim Schalten gegen 5V sind nicht wirklich sinvoll.

Da der Mega die Pull-Ups schon eingebaut hat, lass alles Hühnerfutter 
einfach weg. 0V (GND) an den Encoder, drei Leitungen an die 
Mega-Eingänge, dort die internen Pull-Ups aktivieren, fertig. Die 
Eingänge sind dann zwar active low, das macht aber nichts, die 
Peter'schen Funktionen für Drehgeber und Taster berücksichtigen das.

Oliver

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nachtrag: Das mit deine Widerständen hätte doch gepasst, trotzdem: Lass 
auch den Schalter nach Masse schalten. Das ist einfacher.

Oliver

Autor: Sven B. (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Danke Oliver.

Habe ich Dich richtig verstanden ? Meinstest Du diese Beschaltung ?
Werden die Taster(im Drehencoder) also softwaremäßg entprellt ?
Verstehe ich das richtig ?

Gruß

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So ist es.

Oliver

Autor: Klaus2 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...zumal das alles auch im Datenblatt steht - aber wer nicht nachschaut, 
findet das auch nicht.

Klaus.

Autor: Sven B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank für Eure Hilfe.

Gruß

Autor: Sven B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Klaus.

Sorry Klaus.

Sei mir bitte nicht böse, aber ich muß mich da völlig unverständlich
ausgedrückt haben.
Ich meinte eigentlich nicht die Beschaltung des Encoders hinsichtlich 
der Entprellung und Pullups.

Siehe mein Anhang.
Ok. Ich habe anfangs viel komplizierter gedacht als es ist...
Pullups, entprellung etc.

Nicht gleich böse sein. :o)

Gruß

Autor: Sven B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ich habe nun den Drehencoder richtig angeschlossen und versuche
den in Gang zu kriegen. Vergeblich.
Wie kann ich denn auf dem einfachsten Weg den Drehencoder auf
Funktion überprüfen. ( Habe leider kein Ossi da )

Diesen Code nutze ich:
http://www.mikrocontroller.net/attachment/highlight/22223

Peter Dannegger schrieb :
Einfach auf 2 LEDs legen und langsam drehen. Ändern sich beide Signale
mal gleichzeitig, ists falsch. Es gibt nur 3 Anschlußmöglichkeiten.
Leider leuchten die LED´s sporadisch (wenn dann beide gleichzeitig) auf.

Beim Anschliessen eines LCD´s bekomme ich Zahlen wie -20 etc. die sich 
wahrlos ändern??

Hat Jemand noch ein wenig Geduld übrig?

Gruß

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Sven B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK.
Danke Oliver.

Ich Probiere das mal aus und melde mich gleich wieder.
Bin sehr gespannt.

Danke erstmal

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Peter Dannegger wrote:

> Einfach auf 2 LEDs legen und langsam drehen. Ändern sich beide Signale
> mal gleichzeitig, ists falsch.

Kann schwierig werden.  Ich habe Encoder, bei denen beide Signale
sich optisch immer gleichzeitig verändern.  Erst wenn man etwas
zeitlich besser Auflösendes (Oszi im Einmal-Trigger-Modus oder LA)
anschließt, sieht man den Versatz.  Das liegt daran, dass die zwischen
den Rastungen ziemlich kräftig weiter gezogen werden.

Dafür war ich am LA-Bild total erstaunt.  Das Prellen war durchweg
im Bereich von maximal einigen 100 ns, und oft genug war mit den
10 ns, die mein alter LA auflöst, gar kein Prellen feststellbar.

Autor: Sven B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK.

Ich denke die beste Methode wird sein, wenn ich das ganze mal anstatt 
als signal an einer LED -  auf einem LCD ausgebe.

Ich krame das mal kurz raus und melde mich gleich wieder.

danke erstmal für die tips.

Autor: Sven B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok.

ich habe ein LCD und versuche die Signaländerungen auf dem LCD 
auszugeben.
( In diesem Fall : enc_delta; )


Controllerfrequenz : 16 MHz
Drehencoder PORTB: A - Pin0; B - Pin1

Code :
#include <avr\io.h>
#include <avr\interrupt.h>
#include <avr\signal.h>

#include "glcd.h"
#include "font_small.h"

#define PHASE_A  (PINB & 1<<PINB0)  // PINB.0
#define PHASE_B (PINB & 1<<PINB1)  // PINB.1


volatile char  enc_delta;    // -128 ... 127


int main( void )
{
  lcd_init();
  lcd_clear();
  lcd_set_cursor(0,LINE0);
  lcd_puts(small_font,"LCD Test ist OK");

  TCCR0 = 1<<CS01;      //divide by 8 * 256
  TIMSK = 1<<TOIE0;      //enable timer interrupt

  sei();
  for(;;)
  {
  lcd_set_cursor(0,LINE1);
  lcd_puts(small_font,enc_delta);
  }
}


SIGNAL (SIG_OVERFLOW0)
{
  static char enc_last = 0x01;
  char i = 0;

  if( PHASE_A )
    i = 1;

  if( PHASE_B )
    i ^= 3;        // convert gray to binary

  i -= enc_last;      // difference new - last

  if( i & 1 ){        // bit 0 = value (1)
    enc_last += i;      // store new as next last

    enc_delta += (i & 2) - 1;    // bit 1 = direction (+/-)
  }
}


Es tut sich leider nichts...

Auf dem LCD erscheint :
LCD Test ist OK

Die Variable enc_delta wird leider nicht ausgegeben :o(

Was mache ich falsch ?
Liegt es an der Frequenz ?

Gruß

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>  lcd_puts(small_font,enc_delta);

kann mit Sicherheit keine Interwerte ausgeben, sondern nur Strings.

Probiers mal mit
#include <stdlib.h>
...
char outstring[20];
itoa(enc_delta, outstring, 10);
lcd_puts(small_font,outstring);

Oliver

Autor: Klaus2 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...wenn da jetzt nicht 2 fässer auf einmal aufgemacht werden :)

du musst doch nur detektieren, ob 2 pins am uC unterschiedlich auf masse 
gezogen werden, erst a dann b -> lass led1 leuchten / erst b dann a -> 
lass led2 leuchten...sowas kann man mit nem flipflop sogar analog lösen 
:)

also lass erstmal das lcd weg und versuche, die LOGIKAUSWERTUNG sauber 
hinzubekommen - sonst sind es auf einmal exponentiell mehr 
fehlerquellen!!!

und ich wollte nicht "böse" sein, aber es schien, dass du nichtmals 
VERSCHT hast, das datenblatt und dessen timingdiagramme zu 
interpretieren!

Klaus.

Autor: Sven B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok Oliver.

Ich dachte beim volatile char  enc_delta; handelt es sich um eine 
character-Variable. Ups...

Aber auch das habe ich schon bereits ausprobiert...

...
for(;;)
{
lcd_clear();
char outstring[20];
itoa(enc_delta,outstring,10); //convertieren ins 10-er System
lcd_set_cursor(0,LINE1);
lcd_puts(small_font,outstring);
_delay_ms(200);
}
..

AUSGABE  auf dem LCD:

Werte zwischen 1 und 255 die sich selbständig (unsinnig) ändern ???

was soll das ganze?

Autor: Sven B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
P.S.
Das Drehen des Drehencoders(links oder rechts) wirkt sich nicht auf die 
Ausgabe aus.

D.h. Das Ding funktioniert nicht.

Autor: Sven B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und noch was.
Wenn ich den Drehencoder ganz herausnehme, tut sich immernoch
das gleiche auf dem LCD.
Werte zwischen 1 und 255 sporadisch springen um.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sven B. wrote:

> Werte zwischen 1 und 255 die sich selbständig (unsinnig) ändern ???
>
> was soll das ganze?

Tja. dann wird sich wohl dein enc_delta ständig ändern.

Hast du jetzt eigentlich die externen Pullup Widerstände noch dran?
Wenn nein: Ich seh in deinem Code nirgends, wo du die internen 
einschaltest.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sven B. wrote:
> Und noch was.
> Wenn ich den Drehencoder ganz herausnehme, tut sich immernoch
> das gleiche auf dem LCD.
> Werte zwischen 1 und 255 sporadisch springen um.

In dem Fall ist dann alles klar.
Ein Eingang, den du offen lässt, fängt sich alle mögliche 
elektromagnetische Strahlung aus der Umgebung ein. -> interne Pullup 
Widerstände einschalten hilft ungemein.

Autor: P. S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sven B. wrote:

> Ich dachte beim volatile char  enc_delta; handelt es sich um eine
> character-Variable. Ups...

Dann waere es immer noch falsch. Dir fehlen offensichtlich die 
C-Grundlagen, die solltest du dir erst aneignen und dich dann an 
Mikrocontroller wagen.

> AUSGABE  auf dem LCD:
>
> Werte zwischen 1 und 255 die sich selbständig (unsinnig) ändern ???

Laut deinem Schaltplan haengt der Drehgeber an D0-D2, abgefragt wird B0 
& B1, richtig initialisiert (Portrichtung & Pullup) wird keins von 
beiden.

> was soll das ganze?

Das frage ich mich auch...

Autor: Sven B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Peter.

Danke für die Antwort.

Eingänge definiert.
Interne Pullup-Widerstände sind an.


int main( void )
{
  lcd_init();
  lcd_clear();
  lcd_set_cursor(0,LINE0);
  lcd_puts(small_font,"LCD Test ist OK");

  DDRB  &= ~(_BV(PB1) | _BV(PB0)); //eingang
  PORTB =  (_BV(PB1) | _BV(PB0));  //pullup

  TCCR0 = 1<<CS01;      //divide by 8 * 256
  TIMSK = 1<<TOIE0;      //enable timer interrupt

  sei();
  for(;;)
  {
   lcd_clear();
   char outstring[20];
   itoa(enc_delta,outstring,10); //convertieren ins 10-er System
   lcd_set_cursor(0,LINE1);
   lcd_puts(small_font,outstring);
  _delay_ms(200);
  }
}

Ergebnis:
Sieht gut aus!

Peter Du bist der Beste!
Ich danke Dir vielmals!
Mal wieder habt Ihr mir sehr geholfen :o)

Gruß ( freu )

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du denn gar kein Stück Messmittel in Reichweite, das irgendwie
zu einer zeitlichen Darstellung zweier Signale taugt?

Hier wäre ein schneller Hack:
#include <stdbool.h>
#include <stdint.h>

#define F_CPU 16000000ul

#include <avr/io.h>
#include <avr/interrupt.h>

static void ioinit(void)
{
    TCCR0 = (1<<CS01) | (1<<CS00); //divide by 64 * 256 => ~ 1 ms clock ticks
    TIMSK = 1<<TOIE0;      //enable timer overflow interrupt

#define BAUD 9600
#include <util/setbaud.h>
    UBRRH = UBRRH_VALUE;
    UBRRL = UBRRL_VALUE;
#if USE_2X
    UCSRA |= (1 << U2X);
#else
    UCSRA &= ~(1 << U2X);
#endif

    UCSRB = (1 << TXEN);

    sei();
}

static void tx_char(char c)
{
    while ((UCSRA & (1 << UDRE)) == 0)
        /* wait */;
    UDR = (uint8_t)c;
}


volatile static bool updated;
volatile static uint8_t data;

int main( void )
{
    ioinit();

    for(;;)
    {
        if (updated)
        {
            if (data & 2) tx_char('1');
            else tx_char('0');
            if (data & 1) tx_char('1');
            else tx_char('0');
            tx_char(' ');
            updated = false;
        }
    }

    return 0;
}


ISR(TIMER0_OVF_vect)
{
    if (updated)
        return;                 /* not yet processed */

    static uint8_t lastval;
    uint8_t thisval = PINB;

    thisval &= 3;               /* only PINB0 & PINB1 to consider */
    if (thisval != lastval)
    {
        lastval = thisval;
        data = thisval;
        updated = true;
    }
}

Der sollte auf der UART Zeichenfolgen 00 01 11 10 usw. ausgeben.

Deine Timerinterruptrate von 1/(128 µs) halte ich für ziemlich
heftig.  Üblich sind Raten von 200 Hz ... 1 kHz, um einen Drehgeber
zu pollen.  Das wird natürlich nur dann ein Problem, wenn dein
Geber mehr prellt als meiner, den ich da oben genannt habe.

Autor: Sven B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Jörg Wunsch!

Was zum Messen habe ich leider nicht da. kann mir von meinem 
Ausbildungsgeld kein Ossi kaufen. Könnte mir von der Arbeit ein Ossi 
mitbringen, aber die Leute haben Angst daß ich das kaputt mache.

Das mit dem UART ist ja eine tolle Idee. Danke für den Tip und Code.
Damit werde ich mich auch ein bißchen anfreunden ;o)

Ich danke Euch allen nochmal und wünsche ein schönes WE !

Sven

Autor: Philipp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> kann mir von meinem Ausbildungsgeld kein Ossi kaufen.

Nenn's bitte Oszi oder Scope. Oder gleich ganz.

Mit "Ossi" meinst du abfällig eine ganze Bevölkerungsgruppe ;-)

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Ossi" wäre ja dann wohl auch die Kurzform für "Ossiloskop". :-)

Autor: Sven B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja ihr habt Recht!
Sorry ich meinte auch Osziloskop :o)

Wollte niemanden beleidigen !

Autor: Stephan Henning (stephan-)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Jörg,

welche Bevölkerungsschicht hat Dir denn vorgeschwebt ??
Was ist ein "Ossi" ??  :-(

Autor: Gast aus Prenzlau (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Tag.

Würde es gehen mit dem Code von Sven B. bis 1000 zu drehen und nicht bis 
255 ?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gast aus Prenzlau wrote:
> Guten Tag.
>
> Würde es gehen mit dem Code von Sven B. bis 1000 zu drehen und nicht bis
> 255 ?

Die Limitierung in seinem Code entsteht ja nur dadurch, dass er 
enc_delta als char ausgeführt hat (das sollte man sowieso besser zu 
einem signed char oder noch besser zu einem int8_t machen). Ersetz ihn 
durch einen 16-Bit Datentyp und du kannst bis 16384 zählen. Mach einen 
32 Bit Type draus und es geht noch höher.

Den Drehencoder decodieren ist eine Sache. Was du dann mit dem 
Änderungswert machst ist eine andere Sache.

Autor: Gast aus Prenzlau (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Antwort.

Das ist ja einfacher als ich dachte.

Autor: P. S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Karl heinz Buchegger wrote:

> Die Limitierung in seinem Code entsteht ja nur dadurch, dass er
> enc_delta als char ausgeführt hat (das sollte man sowieso besser zu
> einem signed char oder noch besser zu einem int8_t machen). Ersetz ihn
> durch einen 16-Bit Datentyp und du kannst bis 16384 zählen. Mach einen
> 32 Bit Type draus und es geht noch höher.

Dann aber nicht vergessen, den Zugriff atomar zu machen (siehe auch 
atomic.h).

Autor: Route_66 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Karl heinz Buchegger
16 Bit geht von 0...65535 oder -32768...32767.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Route_66 wrote:
> @Karl heinz Buchegger
> 16 Bit geht von 0...65535 oder -32768...32767.

Kann nur sagen: hatte heute noch keinen Kaffee und draussen schneits und 
überhaupt :-)

Danke

Autor: Gast aus Prenzlau (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo nochmal.

Sorry Karl,
es ist doch nicht so einfach...

Wenn ich die variable richtung als:

volatile unit8_t richtung=0;

definiere, kommt leider keine Änderung (0...255).

Habe ich es doch nicht verstanden ?
#include <avr/io.h>
#include "glcd.h"
#include "font_big.h"
#include <avr\interrupt.h>

#define Schalter_A PINB0 // Schalter A im Drehgeber 
#define Schalter_B PINB1 // Schalter B im Drehgeber
#define Geber      PINB  // Drehgeber Port

volatile unsigned char richtung = 0;  // 0 ... 255
volatile char outstring_alt[5];

int main (void)
{
  char outstring[5];

    DDRB  &= ~(_BV(PB1) | _BV(PB0));  //Eingänge
    PORTB =   (_BV(PB1) | _BV(PB0));  //Pullup

    TCCR0 = (1<<CS01) | (1<<CS00);    //divide by 64 * 256
    TIMSK = 1<<TOIE0;

  lcd_init();
  lcd_clear();  

  sei();  
  for(;;)
  {
    
    strcpy(outstring_alt,outstring);
    itoa(richtung, outstring, 10);

    if(strcmp(outstring,outstring_alt)!=0)
    {
      lcd_set_cursor(0,LINE3);lcd_puts(big_font,outstring_alt,WHITE);
    }
    lcd_set_cursor(0,LINE3);lcd_puts(big_font,outstring,BLACK);
  
  }  
  
}


ISR(TIMER0_OVF_vect)
{
  static unsigned char alter_status = 0,step = 0;
  unsigned char        neuer_status;

  neuer_status = Geber & (_BV(Schalter_A) | _BV(Schalter_B)); // änderung einlesen

  if ((neuer_status ^ step)==(_BV(Schalter_A) | _BV(Schalter_B)))
  {
    if ((neuer_status ^ alter_status)==_BV(Schalter_A))
      richtung +=1;                  // Es war nach rechts
    else
      richtung -=1;                  // Es war nach links
    step = neuer_status;
  }
  alter_status = neuer_status;
  

}

Autor: Sven B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei volatile unit8_t richtung=0;

gibt es sowieso eine Fehlermeldung :o)

Versuch mit

...
volatile uint8_t richtung=0;
...

Gruß

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Code den man nicht versteht einfach nur so zusammenzukopieren, hat nocht 
nie funktioniert.

Autor: Gast aus Prenzlau (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ändert sich auch nicht

Der Wert bleibt immer zwischen 0 und 255.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gast aus Prenzlau wrote:
> Ändert sich auch nicht
>
> Der Wert bleibt immer zwischen 0 und 255.


Ja?
Was erwartest du?

Ein uint8_t, wie der Name schon sagt, ist ein unsigned (also ohne 
Vorzeichen) int mit 8 Bit.
Mit 8 Bit kann man ohne Vorzeichen von 0 bis 255 zählen.

Wie wärs mit einem uint16_t
Der hat, wie der Name schon sagt, 16 Bit

Autor: Sven B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Richtig.

volatile uint16_t richtung=0;

....
if (richtung>=1000) richtung=0;
...

Vorsicht,daß Du keinen Krampf beim Drehen bekommst...

Sven

Autor: Mich mag keiner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
schneits -> schneit's

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.