mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik LCD von Pollin ( mc1001aw-tgr ) 1*10 wie steuere ich die 2. displayhälfte an ?


Autor: Sebastian N. (exl)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
guten tag,
ich habe das LCD Display von Pollin mc1001aw-tgr
es hat 1x10 Zeichen, die ich mit meinem c Programm ansprechen will.

wie ich bereits hier
Beitrag "LCD-Modul MC1001AW-TGR"
gelesen habe scheine ich zur ansteuerung der 2. displayhälfte
in die "lowerline" wechseln zu müssen (was auch immer das ist)

ich verwende die c funktionen die ich hier auf der seite irgendwo mal
kopiert habe, und so angepasst habe das ich die 4Datenbits auch dahin 
legen kann wo ich will.

es funktioniert bis jetzt nur das ich einmalig 5 zeichen auf das display 
schreibe (auf die linke display hälfte),
wenn ich mehr schreibe sieht man nichts mehr.
wenn ich mit
          set_cursor(0,1);
          lcd_string("nanu3");
nochmals auf die ersten 5zeichen schreiben will geht es auch nicht
es steht dann in den ersten 5zeichen variabler datenschrott.

deshalb gehe ich davon aus das etwas mit meiner set_cursor fkt oder mit 
meiner init fkt nicht stimmt:
void set_cursor(uint8_t x, uint8_t y)
{
  uint8_t tmp;
 
  switch (y) {
    case 1: tmp=0x80+0x00+x; break;    // 1. Zeile
    case 2: tmp=0x80+0x40+x; break;    // 2. Zeile
    case 3: tmp=0x80+0x10+x; break;    // 3. Zeile
    case 4: tmp=0x80+0x50+x; break;    // 4. Zeile
    default: return;                   // für den Fall einer falschen Zeile
  }
  lcd_command(tmp);
}

void lcd_init(void)
{
    unsigned char temp = 0x00;
   LCD_DDR = LCD_DDR | (1<<LCD_DB4)|(1<<LCD_DB5)|(1<<LCD_DB6)|(1<<LCD_DB7) | (1<<LCD_RS) | (1<<LCD_EN);   // Port auf Ausgang schalten
 
   // folgendes muss 3mal hintereinander gesendet werden zur Initialisierung
   _delay_ms(150);
    LCD_PORT &= ~((1<<LCD_DB4)|(1<<LCD_DB5)|(1<<LCD_DB6)|(1<<LCD_DB7));//Datenleitungen auf 0 setzen LCD_PORT &= 0xF0;
    
    if(0x03 & (1<<0))temp|=(1<<LCD_DB4);//schiebt das bit von DB4 auf den platz LCD_DB4
    if(0x03 & (1<<1))temp|=(1<<LCD_DB5);//schiebt das bit von DB4 auf den platz LCD_DB4
    if(0x03 & (1<<2))temp|=(1<<LCD_DB6);//schiebt das bit von DB4 auf den platz LCD_DB4
    if(0x03 & (1<<3))temp|=(1<<LCD_DB7);//schiebt das bit von DB4 auf den platz LCD_DB4
    LCD_PORT |= temp;
   // wurde durch die obigen 4 zeilen ersetzt LCD_PORT |= 0x03;            todo wegmachen
   LCD_PORT &= ~(1<<LCD_RS);      // RS auf 0
   lcd_enable();
 
   _delay_ms(50);
   lcd_enable();
 
   _delay_ms(10);
   lcd_enable();
   _delay_ms(10);
 
   // 4 Bit Modus aktivieren 
   temp = 0x00;
   LCD_PORT &= ~((1<<LCD_DB4)|(1<<LCD_DB5)|(1<<LCD_DB6)|(1<<LCD_DB7));//Datenleitungen auf 0 setzen LCD_PORT &= 0xF0;
    if(0x02 & (1<<0))temp|=(1<<LCD_DB4);//schiebt das bit von DB4 auf den platz LCD_DB4
    if(0x02 & (1<<1))temp|=(1<<LCD_DB5);//schiebt das bit von DB4 auf den platz LCD_DB4
    if(0x02 & (1<<2))temp|=(1<<LCD_DB6);//schiebt das bit von DB4 auf den platz LCD_DB4
    if(0x02 & (1<<3))temp|=(1<<LCD_DB7);//schiebt das bit von DB4 auf den platz LCD_DB4
   LCD_PORT |= temp; //vorher wurde es gleich |= 0x02 gemacht
   lcd_enable();
   _delay_ms(10);
 
   // 4Bit / 2 Zeilen / 5x7
   //lcd_command(0x28);
    // 4Bit / 1 Zeilen / 5x7
   lcd_command(0x20);
   // Display ein / Cursor aus / kein Blinken
   lcd_command(0x0C); 
 
   // inkrement / kein Scrollen
   lcd_command(0x06);
 
   lcd_clear();
}


was mache ich falsch ?

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier dürfte das Problem liegen:
   // 4Bit / 2 Zeilen / 5x7
   //lcd_command(0x28);
    // 4Bit / 1 Zeilen / 5x7
   lcd_command(0x20);

Versuchs mal mit der 2 Zeilen Version, also mit 0x28 statt 0x20.
Ansonsten passt deine set_cursor Funktion und das mit der 2. Zeile für 
die rechten 5 Zeichen stimmt auch.

Autor: Sebastian N. (exl)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok, habs noch mal auf die 2 zeilen version geändert

hab in meiner while(1){ schleife das folgende drin

          set_cursor(0,1);
          lcd_string("nanu3");}
jetzt flackert über das ganze display ein nanu3 das scheinbar sehr 
schnell
an 4 verschiedenen stellen nacheinander angezeigt wird

was könnte noch falsch sein ?

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schreibst du eventuell in einer Endlosschleife den Text ins Display?

Autor: Sebastian N. (exl)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja, ist aber jetzt nur zum testen weil das was ich wirklich wollte nicht 
ging

ich wollte ___U=xxxxx ausgeben, wobei xxxxx für einen dauernd gemessenen 
analogen spannungswert steht, der immer wieder ausgegeben werden soll

im prinzip also schreiben in ner endlosschleife.

ist daran was falsch ?
hab das schon mit anderen displays gemacht und keine probleme gehabt

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Setzt du vor dem Schreiben auch die Adresse wieder zurück an den Anfang? 
Der flimmernde Text deutet nämlich nicht darauf hin.

Autor: Michael W. (retikulum)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Indem du den gemessenen Spannungswert mit dem letzten vergleichst und 
nur bei einem Unterschied das Display neu beschreibst.
Michael

Autor: Sebastian N. (exl)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja, ich setze mit
set_cursor(0,1);
wieder an den anfang der 1. zeile oder nicht ?

hab gerade das andere display mal angeschlossen mit dem es vorher ging
(vorher = steckbrett und unveränderter c code,
 jetzt = aufgelötet mit 8mhz quarz, c code so geändert das die display 
datenleitungen beliebig an ausgänge eines ports verteild werden können)

Autor: Sebastian N. (exl)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hab gerade noch bemerkt, wenn ich set_cursor(0,1);
weck lesse, dann habe ich ein stehendes bild von ganz viel "nanu3" 
nacheinander

=> set_cursor(0,1);  bewirkt irgendetwas, aber nicht das was es soll

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Poste mal den kompletten Code, so wie er momentan aussieht.

Autor: Sebastian N. (exl)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
// Ansteuerung eines HD44780 kompatiblen LCD im 4-Bit-Interfacemodus
// http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial
//

#include <avr/io.h>
#include <util/delay.h>
 
void lcd_data(unsigned char temp1);
void lcd_string(char *data);
void lcd_command(unsigned char temp1);
void lcd_enable(void);
void lcd_init(void);
void lcd_home(void);
void lcd_clear(void);
void set_cursor(uint8_t x, uint8_t y);
 
// Hier die verwendete Taktfrequenz in Hz eintragen, wichtig!
 
//#define F_CPU 1000000
 
// LCD Befehle
 
#define CLEAR_DISPLAY 0x01
#define CURSOR_HOME   0x02
 
// Pinbelegung für das LCD, an verwendete Pins anpassen
 
#define LCD_PORT      PORTD
#define LCD_DDR       DDRD
#define LCD_RS        PD0
#define LCD_EN        PD1
#define LCD_DB4       PD5
#define LCD_DB5       PD2
#define LCD_DB6       PD4
#define LCD_DB7       PD3
// DB4 bis DB7 des LCD sind mit PD0 bis PD3 des AVR verbunden 

// Ansteuerung eines HD44780 kompatiblen LCD im 4-Bit-Interfacemodus
// http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial
//
// Die Pinbelegung ist über defines in lcd-routines.h einstellbar
 

// sendet ein Datenbyte an das LCD
void lcd_data(unsigned char temp1)
{
   unsigned char temp2 = 0x00;
 
   LCD_PORT |= (1<<LCD_RS);        // RS auf 1 setzen
 
    //Übertragung des höherwertigen Nibbels
   LCD_PORT &= ~((1<<LCD_DB4)|(1<<LCD_DB5)|(1<<LCD_DB6)|(1<<LCD_DB7));   // die 4 datenbits auf 0 setzen

/*
   temp2 |= (temp1 & (1<<4))<<LCD_DB4; //schiebt das bit von DB4 auf den platz LCD_DB4
   temp2 |= (temp1 & (1<<5))<<LCD_DB5; //schiebt das bit von DB5 auf den platz LCD_DB5
   temp2 |= (temp1 & (1<<6))<<LCD_DB6; //schiebt das bit von DB6 auf den platz LCD_DB6
   temp2 |= (temp1 & (1<<7))<<LCD_DB7; //schiebt das bit von DB7 auf den platz LCD_DB7
  */
    if(temp1 & (1<<4))temp2|=(1<<LCD_DB4);//schiebt das bit von DB4 auf den platz LCD_DB4
    if(temp1 & (1<<5))temp2|=(1<<LCD_DB5);//schiebt das bit von DB4 auf den platz LCD_DB4
    if(temp1 & (1<<6))temp2|=(1<<LCD_DB6);//schiebt das bit von DB4 auf den platz LCD_DB4
    if(temp1 & (1<<7))temp2|=(1<<LCD_DB7);//schiebt das bit von DB4 auf den platz LCD_DB4 
    
   LCD_PORT |= temp2;               // setzen
   lcd_enable();
 

    //Übertragung des niederwertigen Nibbels
   LCD_PORT &= ~((1<<LCD_DB4)|(1<<LCD_DB5)|(1<<LCD_DB6)|(1<<LCD_DB7));   // die 4 datenbits auf 0 setzen
   
   temp2 = 0x00;
   /*
   temp2 |= (temp1 & (1<<0))<<LCD_DB4; //schiebt das bit von DB4 auf den platz LCD_DB4
   temp2 |= (temp1 & (1<<1))<<LCD_DB5; //schiebt das bit von DB5 auf den platz LCD_DB5
   temp2 |= (temp1 & (1<<2))<<LCD_DB6; //schiebt das bit von DB6 auf den platz LCD_DB6
   temp2 |= (temp1 & (1<<3))<<LCD_DB7; //schiebt das bit von DB7 auf den platz LCD_DB7
   */
    if(temp1 & (1<<0))temp2|=(1<<LCD_DB4);//schiebt das bit von DB4 auf den platz LCD_DB4
    if(temp1 & (1<<1))temp2|=(1<<LCD_DB5);//schiebt das bit von DB4 auf den platz LCD_DB4
    if(temp1 & (1<<2))temp2|=(1<<LCD_DB6);//schiebt das bit von DB4 auf den platz LCD_DB4
    if(temp1 & (1<<3))temp2|=(1<<LCD_DB7);//schiebt das bit von DB4 auf den platz LCD_DB4
   
   LCD_PORT |= temp2;               // setzen
   lcd_enable();
   
   _delay_us(42);
}
 
// sendet einen Befehl an das LCD
void lcd_command(unsigned char temp1)
{
   unsigned char temp2 = 0x00;
 
    //Übertragung des höherwertigen Nibbels
   LCD_PORT &= ~((1<<LCD_DB4)|(1<<LCD_DB5)|(1<<LCD_DB6)|(1<<LCD_DB7));   // die 4 datenbits auf 0 setzen

    if(temp1 & (1<<4))temp2|=(1<<LCD_DB4);//schiebt das bit von DB4 auf den platz LCD_DB4
    if(temp1 & (1<<5))temp2|=(1<<LCD_DB5);//schiebt das bit von DB4 auf den platz LCD_DB4
    if(temp1 & (1<<6))temp2|=(1<<LCD_DB6);//schiebt das bit von DB4 auf den platz LCD_DB4
    if(temp1 & (1<<7))temp2|=(1<<LCD_DB7);//schiebt das bit von DB4 auf den platz LCD_DB4
   
   LCD_PORT |= temp2;               // setzen
   lcd_enable();
 

    //Übertragung des niederwertigen Nibbels
   LCD_PORT &= ~((1<<LCD_DB4)|(1<<LCD_DB5)|(1<<LCD_DB6)|(1<<LCD_DB7));   // die 4 datenbits auf 0 setzen
   
   temp2 = 0x00;
    if(temp1 & (1<<0))temp2|=(1<<LCD_DB4);//schiebt das bit von DB4 auf den platz LCD_DB4
    if(temp1 & (1<<1))temp2|=(1<<LCD_DB5);//schiebt das bit von DB4 auf den platz LCD_DB4
    if(temp1 & (1<<2))temp2|=(1<<LCD_DB6);//schiebt das bit von DB4 auf den platz LCD_DB4
    if(temp1 & (1<<3))temp2|=(1<<LCD_DB7);//schiebt das bit von DB4 auf den platz LCD_DB4
   
   LCD_PORT |= temp2;               // setzen
   lcd_enable();
   
   _delay_us(42);
}
 
// erzeugt den Enable-Puls
void lcd_enable(void)
{
   // Bei Problemen ggf. Pause gemäß Datenblatt des LCD Controllers einfügen
   // http://www.mikrocontroller.net/topic/81974#685882
   LCD_PORT |= (1<<LCD_EN);
    _delay_us(10);                   // kurze Pause
   // Bei Problemen ggf. Pause gemäß Datenblatt des LCD Controllers verlängern
   // http://www.mikrocontroller.net/topic/80900
   LCD_PORT &= ~(1<<LCD_EN);
}
 
// Initialisierung: 
// Muss ganz am Anfang des Programms aufgerufen werden.
 
void lcd_init(void)
{
    unsigned char temp = 0x00;
   LCD_DDR = LCD_DDR | (1<<LCD_DB4)|(1<<LCD_DB5)|(1<<LCD_DB6)|(1<<LCD_DB7) | (1<<LCD_RS) | (1<<LCD_EN);   // Port auf Ausgang schalten
 
   // folgendes muss 3mal hintereinander gesendet werden zur Initialisierung
   _delay_ms(150);
    LCD_PORT &= ~((1<<LCD_DB4)|(1<<LCD_DB5)|(1<<LCD_DB6)|(1<<LCD_DB7));//Datenleitungen auf 0 setzen LCD_PORT &= 0xF0;
    
    if(0x03 & (1<<0))temp|=(1<<LCD_DB4);//schiebt das bit von DB4 auf den platz LCD_DB4
    if(0x03 & (1<<1))temp|=(1<<LCD_DB5);//schiebt das bit von DB4 auf den platz LCD_DB4
    if(0x03 & (1<<2))temp|=(1<<LCD_DB6);//schiebt das bit von DB4 auf den platz LCD_DB4
    if(0x03 & (1<<3))temp|=(1<<LCD_DB7);//schiebt das bit von DB4 auf den platz LCD_DB4
    LCD_PORT |= temp;
   // wurde durch die obigen 4 zeilen ersetzt LCD_PORT |= 0x03;            todo wegmachen
   LCD_PORT &= ~(1<<LCD_RS);      // RS auf 0
   lcd_enable();
 
   _delay_ms(50);
   lcd_enable();
 
   _delay_ms(10);
   lcd_enable();
   _delay_ms(10);
 
   // 4 Bit Modus aktivieren 
   temp = 0x00;
   LCD_PORT &= ~((1<<LCD_DB4)|(1<<LCD_DB5)|(1<<LCD_DB6)|(1<<LCD_DB7));//Datenleitungen auf 0 setzen LCD_PORT &= 0xF0;
    if(0x02 & (1<<0))temp|=(1<<LCD_DB4);//schiebt das bit von DB4 auf den platz LCD_DB4
    if(0x02 & (1<<1))temp|=(1<<LCD_DB5);//schiebt das bit von DB4 auf den platz LCD_DB4
    if(0x02 & (1<<2))temp|=(1<<LCD_DB6);//schiebt das bit von DB4 auf den platz LCD_DB4
    if(0x02 & (1<<3))temp|=(1<<LCD_DB7);//schiebt das bit von DB4 auf den platz LCD_DB4
   LCD_PORT |= temp; //vorher wurde es gleich |= 0x02 gemacht
   lcd_enable();
   _delay_ms(10);
 
   // 4Bit / 2 Zeilen / 5x7
   lcd_command(0x28);
    // 4Bit / 1 Zeilen / 5x7
   //lcd_command(0x20);
   // Display ein / Cursor aus / kein Blinken
   lcd_command(0x0C); 
 
   // inkrement / kein Scrollen
   lcd_command(0x06);
 
   lcd_clear();
}
 
// Sendet den Befehl zur Löschung des Displays
 
void lcd_clear(void)
{
   lcd_command(CLEAR_DISPLAY);
   _delay_ms(5);
}
 
// Sendet den Befehl: Cursor Home
 
void lcd_home(void)
{
   lcd_command(CURSOR_HOME);
   _delay_ms(5);
}
 
// setzt den Cursor in Zeile y (1..4) Spalte x (0..15)
 
void set_cursor(uint8_t x, uint8_t y)
{
  uint8_t tmp;
 
  switch (y) {
    case 1: tmp=0x80+0x00+x; break;    // 1. Zeile
    case 2: tmp=0x80+0x40+x; break;    // 2. Zeile
    case 3: tmp=0x80+0x10+x; break;    // 3. Zeile
    case 4: tmp=0x80+0x50+x; break;    // 4. Zeile
    default: return;                   // für den Fall einer falschen Zeile
  }
  lcd_command(tmp);
}
 
// Schreibt einen String auf das LCD
 
void lcd_string(char *data)
{
    while(*data) {
        lcd_data(*data);
        data++;
    }
}


uint16_t ReadChannel(uint8_t mux)
{
  uint8_t i;
  uint16_t result;
 
  ADMUX = mux;                      // Kanal waehlen
  //ADMUX |= (0<<REFS1) | (1<<REFS0); // avcc als referenzspannung
  ADMUX |= (0<<REFS1) | (0<<REFS0); // externe referenzspannung 
  ADCSRA = (1<<ADEN) | (1<<ADPS1) | (1<<ADPS0);    // Frequenzvorteiler 
                               // setzen auf 8 (1) und ADC aktivieren (1)
 
  /* nach Aktivieren des ADC wird ein "Dummy-Readout" empfohlen, man liest
     also einen Wert und verwirft diesen, um den ADC "warmlaufen zu lassen" */
  ADCSRA |= (1<<ADSC);              // eine ADC-Wandlung 
  while ( ADCSRA & (1<<ADSC) ) {
     ;     // auf Abschluss der Konvertierung warten 
  }
  result = ADCW;  // ADCW muss einmal gelesen werden,
                  // sonst wird Ergebnis der nächsten Wandlung
                  // nicht übernommen.
 
  /* Eigentliche Messung - Mittelwert aus 4 aufeinanderfolgenden Wandlungen */
  result = 0; 
  for( i=0; i<8; i++ )
  {
    ADCSRA |= (1<<ADSC);            // eine Wandlung "single conversion"
    while ( ADCSRA & (1<<ADSC) ) {
      ;   // auf Abschluss der Konvertierung warten
    }
    result += ADCW;        // Wandlungsergebnisse aufaddieren
  }
  ADCSRA &= ~(1<<ADEN);             // ADC deaktivieren (2)
 
  result /= 8;                     // Summe durch vier teilen = arithm. Mittelwert
 
  return result;
}
 



char * ltoa(char * buf, uint16_t val, char pad) //todo unsigned long ist zu lang ?
{
  char i;
  char tmp_buf[10];
       
  for(i=0; val>0; val/=10)
    tmp_buf[i++] = (val % 10) + '0';
  if(i==0)
    tmp_buf[i++] = '0';
    
  while(i<pad)
    tmp_buf[i++] = '0';

  while(i>0){
        //printf("i=%d\n",i);  
    *(buf++) = *(tmp_buf+(--i)); //falls hier ein fehler passiert, wurde ein string mit "char * string = "abdcd..."" eröffnet
    }
    
  *buf = '\0';
  return buf;
}

int main(void)
{
    
    lcd_init();
    
    /*
 lcd_string("nanu3");
    lcd_data('T');
    lcd_data('e');
    lcd_data('s');
    lcd_data('t');
    lcd_data('!');

 

        set_cursor(0,3);
    lcd_string("nanu3");
*/
    
    uint16_t adcval;
    char * rueckgabe;
    uint8_t ausgabe;
    char *ausgabestring = "000000"; //geht nur auf einem uC todo
    char *ausgabestring2 = "000000";
            
        
          adcval = ReadChannel(0); //liest den analogeingang
          rueckgabe = ltoa(ausgabestring,adcval,5);
          set_cursor(0,1);
          lcd_string("nanu3");
          //lcd_string(ausgabestring);
    while(1)
    {

          adcval = ReadChannel(0); //liest den analogeingang
          rueckgabe = ltoa(ausgabestring,adcval,5);
          set_cursor(0,1);
          lcd_string("nanu3");
          //lcd_string(ausgabestring);
    }
 
    return 0;
}


Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was erscheint mit dem Code auf dem Display?
Dem Code nach würde ich sagen auf der linken Hälfte erscheint nanu3.

Autor: Sebastian N. (exl)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
es erscheint an zufälligen stellen nanu3 teilweise ineinander 
geschrieben z.b. nananu33 teilweise mit leerzeichen getrennt (je nach 
dem wann ich den restet knopf drücke um das display ein zu frieren)

auserdem flackert das jetzt auf dem ganzen display, nicht nur in der 
linken hälfte.
Mit meinem anderen display ist es auch so (halt auf 2 wirkliche zeilen 
verteilt)

Da ich ja alles neu aufgebaut hab könnte es entweder an der verdrahtung 
oder am programm liegen.
aber ich denke nicht das es an der verdrahtung liegt, da das 
initialisieren ja geht, und auch zeichen dargestellt werden können

Autor: Sebastian N. (exl)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hat keiner ne idee ?

Autor: Sebastian N. (exl)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hab mein problem gefunden, hab im code vergessen die RS leitung auf 0 zu 
setzen...

trotzdem danke

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.