www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik GPS Empfänger an ATmega8


Autor: Steffen O. (derelektroniker) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
habe will einen von den GPS- Empfängern aus diesem Thread hier 
(Beitrag "GPS - Empfänger günstig bei Ebay")
an einen ATmega8 anschliessen, und erstmal die aktuelle Geschwindigkeit 
auf einem LCD ausgeben.
Ich habe die lcd-lib hier aus dem Forum, und die UART-lib von Peter 
Fleury verwendet. Das LCD funktioniert, und das GPS- Modul ist korrekt 
an RX und TX angeschlossen.
Allerdings empfange ich keine Daten von GPS- Modul.....(oder vielleicht 
doch, aber sie werden nicht auf dem LCD ausgegeben?)

Hier mal mein Sourcecode, der übrigends bis auf 7 Warnings fehlerfrei 
erstellt wird:
#include <avr/io.h>
#define F_CPU 4000000
#include <util/delay.h>
#include <stdlib.h>
#include <avr/interrupt.h>

#include "lcd-routines.h"
#include <uart.h>

#define UART_BAUD_RATE  9600   


int main(void)
{
unsigned char empfangen[5],nmea[3] ="",kmh_string[4],temp;
float kmh,nurzumrechnen;

//Uart und LCD initialisieren
uart_init( UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) ); 
lcd_init();
lcd_string("Start!");


while(1)
{

temp = uart_getc();
//Zum Überprüfen
lcd_string(temp);


if(temp == '$')
{
//zwei Zeichen nach $ verwerfen
temp = uart_getc();
temp = uart_getc();
//Variablen zum Testen, ob RMC
nmea[0] = uart_getc();
//jeweils zum Test auf Display ausgeben
lcd_string(nmea[0]);
nmea[1] = uart_getc();
lcd_string(nmea[1]);
nmea[2] = uart_getc();
lcd_string(nmea[2]);
}

//Nach "E," kommt Geschwindigkeit in Knoten
if(temp == 'E')
{
//Nur RMC auslesen, denn nur dort ist Geschwindigkeit (in Knoten)
if(uart_getc() == ',' && nmea[0] == 'R' && nmea[1] == 'M' && nmea[2] == 'C') 
{
lcd_string("Fix gefunden!");

//Geschwindigkeit enpfangen
empfangen[0] = uart_getc();  
empfangen[1] = uart_getc();
empfangen[2] = uart_getc();
empfangen[3] = uart_getc();
empfangen[4] = uart_getc();

//Wenn Geschwindigkeit noch 2-stellig vor dem Komma, 2. Stelle hinter dem Komma = 0
}
if(empfangen[2] == '.')
{
empfangen[4] = '0';
}
//Den String "empfangen" in float umwandeln, zum Rechnen
nurzumrechnen=atof(empfangen);
//Knoten in kmh umrechnen
kmh = nurzumrechnen * 1.852;
//float wieder in String umwandeln, zum auf LCD ausgeben
itoa(kmh,kmh_string,10);
//kmh auf LCD ausgeben
lcd_string(kmh_string);
}
}
}

Vielleicht fällt ja jemandem etwas auf, was ich noch verbessern kann.
Wie man das GPS- Modul auf 9600 Baud einstellen kann, weiß ich nicht 
genau, ich hab einfach mit SIRFDemo das NMEA- Protokoll eingestellt, und 
dabei auch 9600 Baud. Allerdings weiß ich nicht, ob die Einstellungen 
gespeichert werden, oder ob ich das über den µC jedesmal neu 
konfigurieren muss.

Vielen Dank schon einmal im Voraus.
Gruß, Steffen

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie wäre es mit einem sei(); vor while(1) ?

Autor: Steffen O. (derelektroniker) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, werd ich einfügen. Ist das für die UART-lib, oder?

Gruß, Steffen

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ok, werd ich einfügen. Ist das für die UART-lib, oder?

Ja.

Wird aber auch nicht funktionieren weil uart_getc()
nicht auf ein Zeichen wartet.

Autor: Steffen O. (derelektroniker) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aha, muss ich dann noch eine Funktion machen, die solange wartet, bis 
ein Zeichen da ist, also z.B. so:
void getchar()
{
unsigned char zeichen[1];

do
{
zeichen=uart_getc();
} while (zeichen=="Wie schreiben, dass zeichen nichts enthält??")

return zeichen[0];
}

Würde das so funktionieren? Wie kann ich schreiben, dass die Variable 
"zeichen" nichts enthält?

Gruß, Steffen

Autor: Teplotaxl X. (t3plot4x1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
zeichen==0
Wie wärs damit?

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Aha, muss ich dann noch eine Funktion machen, die solange wartet, bis
>ein Zeichen da ist, also z.B. so:

Gute Idee.

>void getchar()

void ist aber nicht gut wenn man einen Wert zurückgeben will ;)

Und unsigned char zeichen[1]; kann man auf char zeichen, reduzieren.

Aber damit bist du immer noch nicht am Ziel.

>Wie kann ich schreiben, dass die Variable
>"zeichen" nichts enthält?

uart_getc() gibt einen bestimmten Wert zurück wenn
noch kein Zeichen da ist. Einfach mal in den Beispielcode schauen?
Der Wert ist ein unsigned int und kein char.

Autor: Steffen O. (derelektroniker) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sir alan Teplotaxl wrote:
>zeichen==0
>Wie wärs damit?

Aber wenn uart_getc() noch  nchts empfängt, dann steht doch in der 
Variable zeichen gar nichts, auch keine 0, oder?


holger wrote:
>>Aha, muss ich dann noch eine Funktion machen, die solange wartet, bis
>>ein Zeichen da ist, also z.B. so:
>
> Gute Idee.
>
>>void getchar()
>
> void ist aber nicht gut wenn man einen Wert zurückgeben will ;)

Ja, ich werde dann int verwenden ;-).

> Und unsigned char zeichen[1]; kann man auf char zeichen, reduzieren.

Ok, mach ich auch.

> Aber damit bist du immer noch nicht am Ziel.

>>Wie kann ich schreiben, dass die Variable
>>"zeichen" nichts enthält?
>
> uart_getc() gibt einen bestimmten Wert zurück wenn
> noch kein Zeichen da ist. Einfach mal in den Beispielcode schauen?
> Der Wert ist ein unsigned int und kein char.

Im Beispiel von Peter Fleury wird das so gemacht:
unsigned int c;
....
c= uart_getc();
        if ( c & UART_NO_DATA )
        {
            /* 
             * no data available from UART 
             */
        }
        else
        {
            /*
             * new data available from UART
             * check for Frame or Overrun error
             */
            if ( c & UART_FRAME_ERROR )
            {
                /* Framing Error detected, i.e no stop bit detected */
                uart_puts_P("UART Frame Error: ");
            }
            if ( c & UART_OVERRUN_ERROR )
            {
                /* 
                 * Overrun, a character already present in the UART UDR register was 
                 * not read by the interrupt handler before the next character arrived,
                 * one or more received characters have been dropped
                 */
                uart_puts_P("UART Overrun Error: ");
            }
            if ( c & UART_BUFFER_OVERFLOW )
            {
                /* 
                 * We are not reading the receive buffer fast enough,
                 * one or more received character have been dropped 
                 */
                uart_puts_P("Buffer overflow error: ");
            }
            /* 
             * send received character back
             */
            uart_putc( (unsigned char)c );
        }

Soll ich einfach das alles in die Funktion getchar() packen?

Gruß, Steffen

Autor: Steffen O. (derelektroniker) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab die Funktion getchar() nun mal so gemacht:
int getchar()
{
unsigned int c;
do
{
c = uart_getc();
        
    if ( c & UART_NO_DATA )
        {
            /* 
             * no data available from UART 
             */
        }
        else
        {
            /*
             * new data available from UART
             * check for Frame or Overrun error
             */
            if ( c & UART_FRAME_ERROR )
            {
                /* Framing Error detected, i.e no stop bit detected */
                lcd_string("UART Frame Error: ");
            }
            if ( c & UART_OVERRUN_ERROR )
            {
                /* 
                 * Overrun, a character already present in the UART UDR register was 
                 * not read by the interrupt handler before the next character arrived,
                 * one or more received characters have been dropped
                 */
                lcd_string("UART Overrun Error: ");
            }
            if ( c & UART_BUFFER_OVERFLOW )
            {
                /* 
                 * We are not reading the receive buffer fast enough,
                 * one or more received character have been dropped 
                 */
                lcd_string("Buffer overflow error: ");
            }
      }
      }while(c==0);
      
      return( (unsigned char) c);
}

Laut Bsp. müsste das doch richtig sein, oder?

Gruß, Steffen

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>      }while(c==0);

Das ist noch falsch. UART_NO_DATA?

Autor: Steffen O. (derelektroniker) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK, ich hab nun die Austrittsbedingung so gemacht:
}while(UART_NO_DATA)

Muss ich da nicht schauen, ob die Variable c Daten enthält? Weil so 
überprüfe ich ja nochmal den UART, aber da wurden die Daten ja schon 
abgeholt.
Wie überprüfe ich, ob die Variable c irgendeinen Inhalt hat?

Gruß, Steffen

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
}while(c==UART_NO_DATA);

Autor: Steffen O. (derelektroniker) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, hab ich nun so gemacht. Allerdings kommen immernoch keine Daten vom 
GPS-Modul an. Ich glaub ich muss echt noch eine Baudrateneinstellung 
beim GPS-Modul machen.
Kommt eigentlich bei jeder Baudrate was an, wenn es die falsche ist, 
eben nur Unsinn?

Gruß, Steffen

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Kommt eigentlich bei jeder Baudrate was an, wenn es die falsche ist,
>eben nur Unsinn?

In der Regel ja. Hast du vieleicht RxD und TxD vertauscht? GND 
angeschlossen?
Wie sieht deine Schaltung aus?

Autor: Steffen O. (derelektroniker) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
GND is angeschlossen, und RX und TX sind eigentlich auch nicht 
vertauscht. Wenn ich die beiden mal vertausche, dann kommen auf dem LCD 
zig Zeichen, die aber alle keinen Sinn ergeben.

Die Schaltung hab ich auf einem BReadboard von Reichelt aufgebaut, kann 
es sein, dass deswegen die 9600 Baud nicht klappen?

Gruß, Steffen

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Wenn ich die beiden mal vertausche, dann kommen auf dem LCD
>zig Zeichen, die aber alle keinen Sinn ergeben.

Ja, ja, ja ...... dann ist es richtig rum !
Stell mal die Baudrate auf 4800 Baud.

Autor: Steffen O. (derelektroniker) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, ich hab nun die Baudrate bei 4800 Baud, aber da kommt beim 
Einschalten gleich mal UART Frame Error, und irgendwann dann auch noch 
ein Buffer Overflow :-(.

Also kann die Einstellung irgendwie nicht stimmen, oder?
Vielleicht muss ich noch beim Modul die Baudrate einstellen....

Gruß, Steffen

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vieleicht brauchst du einen MAX232 am ATMega?

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
holger wrote:
> Vieleicht brauchst du einen MAX232 am ATMega?
Quatsch! Hab das Modul auch an nem Mega16 hängen ohne alles.... Versuch 
mal 38400baud, das ist die Standardeinstellung des Moduls.
Ich hab das zu debugging zwechen so gemacht das ich RX des Megas 
zusätzlich an eine MAX232 und an die Serielle des PCs dann sieht man 
alles was der µC empfangen sollte nochmal auf dem PC und kann dann 
leichter verifizieren was überhaupt ankommt.
Ich würde an deiner Stelle erstmal so anfange, das du alle Empfangenen 
Zeichen bis zum \r\n auf dem LCD darstellst so das du siehst ob der 
String überhaupt korrekt ankommt.

Ich mache das folgendermaßen: (Pseudocode!)
Buffer[100]
counter = 0;
while(1) {
 c = getChar();
 if (c == '$') {
  counter = 0;
 }
 if(c == '\n') {
  break;
 }
 Buffer[counter++] = c;
}
toLCD(Buffer);
Danach kannst du den String in Ruhe zerlegen :)

Autor: Steffen O. (derelektroniker) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, ich werd dann morgen mal meinen PC parallel dazu dranhängen, dann 
sieht man was ankommt, bzw. sollte.
Ich hab nun mal 38400 Baud eingestellt, dann kommt nach dem Einschalten 
UART Frame Error, und danach beide Zeilen des Dislays voll mit X und 
einem Strich jeweils darüber.
Kann es auch sein, dass es nicht klappt, weil die Leitungen des 
Breadboards bei 38400 Baud irgendwie nicht mehr mitspielen?

Hast du auch die rote Leitung an RX, und die weiße an TX?

Ich hab nun mal deine Funktion verwendet, aber ich bekomme weiterhin 
einen UART Frame Error, nun eben nicht mit den X und den Strichen 
drüber....


Vielen Dank schon einmal im Voraus.
Gruß, Steffen

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Was benutzt du als Takt?

MfG Spess

Autor: Steffen O. (derelektroniker) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Einen 4Mhz Quarzoszillator an XTAL1 angeschlossen, und den Controller 
auf external clock gefused.
Meinst du ich soll einen Baudratenqurz verwenden?
Ich hab mit dem 4Mhz Oszillator auch schon mit dem PC kommuniziert, usw.

Gruß, Steffen

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Zumindest wollte ich erst mal sicherstellen, das kein RC-oszillator im 
Spiel ist.

Welche Teile deines Programms hast du schon einzeln getestet, und bist 
sicher das die funktionieren. Nur als Hintergrund: Schaltung aufbauen, 
Programm schreiben und geht, läuft selten.

Mein persönlicher Ansatz wäre einen kompletten NMEA-Sring in einen 
Puffer einlesen, und dann in Ruhe auswerten

MfG Spess

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Teste erstmal mit dem PC. Da kannst du auch sehen ob die Baudrate 
stimmt, ohne richtige Baudrate kommt nur mist raus. ;)

Autor: Steffen O. (derelektroniker) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So, nun hab ich den Empfänger an den Mega8 angeschlossen, und dazwischen 
einen Pegelwandel, der an den PC mit nem Terminalprogramm angeschlossen 
ist.
Der GPS-Empfänger sendet brav seinen NMEA Datensatz, bei 9600 Baud, wie 
ich es eingestellt hatte. Am Terminalprogramm kann ich alle Strings gut 
lesen, und es sind keine falschen Zeichen dabei.

Also liegt es definitiv am µC, bzw. der Software. Ich poste hier nochmal 
meinen kompletten Code, der eigentlich bei 4Mhz funktionieren sollte, 
vielleicht wisst ihr ja noch was.
#include<avr/io.h>
#define F_CPU 4000000
#include<util/delay.h>
#include <stdlib.h>
#include <avr/interrupt.h>

#include "lcd-routines.h"
#include <uart.h>

#define UART_BAUD_RATE   9600

int getchar()
{
unsigned int c;
do
{
c = uart_getc();
        
    if ( c & UART_NO_DATA )
        {
            /* 
             * no data available from UART 
             */
        }
        else
        {
            /*
             * new data available from UART
             * check for Frame or Overrun error
             */
            if ( c & UART_FRAME_ERROR )
            {
                /* Framing Error detected, i.e no stop bit detected */
                lcd_string("UART Frame Error: ");
            }
            if ( c & UART_OVERRUN_ERROR )
            {
                /* 
                 * Overrun, a character already present in the UART UDR register was 
                 * not read by the interrupt handler before the next character arrived,
                 * one or more received characters have been dropped
                 */
                lcd_string("UART Overrun Error: ");
            }
            if ( c & UART_BUFFER_OVERFLOW )
            {
                /* 
                 * We are not reading the receive buffer fast enough,
                 * one or more received character have been dropped 
                 */
                lcd_string("Buffer overflow error: ");
            }
      }
      }while(c==UART_NO_DATA);
      
      return( (unsigned char) c);
}

int main(void)
{
unsigned char empfangen[5],nmea[3] ="",kmh_string[4],temp,Buffer[100];
float kmh,nurzumrechnen;
int counter,c;

//Uart und LCD initialisieren
uart_init( UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) ); 
lcd_init();
lcd_string("Start!");
_delay_ms(1000);
lcd_clear();

sei();


while(1)
{

temp = getchar();
//Zum Überprüfen
lcd_string(temp);


if(temp == '$')
{
//zwei Zeichen nach $ verwerfen
temp = getchar();
temp = getchar();
//Variablen zum Testen, ob RMC
nmea[0] = getchar();
//jeweils zum Test auf Display ausgeben
lcd_string(nmea[0]);
nmea[1] = getchar();
lcd_string(nmea[1]);
nmea[2] = getchar();
lcd_string(nmea[2]);
}

//Nach "E," kommt Geschwindigkeit in Knoten
if(temp == 'E')
{
//Nur RMC auslesen, denn nur dort ist Geschwindigkeit (in Knoten)
if(getchar() == ',' && nmea[0] == 'R' && nmea[1] == 'M' && nmea[2] == 'C') 
{
lcd_string("Fix gefunden!");

//Geschwindigkeit enpfangen
empfangen[0] = getchar();  
empfangen[1] = getchar();
empfangen[2] = getchar();
empfangen[3] = getchar();
empfangen[4] = getchar();

//Wenn Geschwindigkeit noch 2-stellig vor dem Komma, 2. Stelle hinter dem Komma = 0
}
if(empfangen[2] == '.')
{
empfangen[4] = '0';
}
//Den String "empfangen" in float umwandeln, zum Rechnen
nurzumrechnen=atof(empfangen);
//Knoten in kmh umrechnen
kmh = nurzumrechnen * 1.852;
//float wieder in String umwandeln, zum auf LCD ausgeben
itoa(kmh,kmh_string,10);
//kmh auf LCD ausgeben
lcd_string(kmh_string);
}
}
}

Auf dem Display erscheinen, wenn ich alles angeschlossen habe 
irgendwelche Zeichen, in !beiden! Zeilen, und irgendwo dazwischen kommen 
mal Bruchstücke von Overflow Error, usw..
Irgendwann kommt auch mal ein Teil von "Fix gefunden".....

Ich bin echt scheon ein wenig verzweifelt, weil ich nicht weiß, woran es 
liegt, und es partout nicht klappen will :-(.
Ich hoffe, jemand weiß noch Rat....

Vielen Dank schon einmal im Voraus.
Gruß, Steffen

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>lcd_string(temp);
>lcd_string(nmea[0]);

temp ist kein String. nmea[0] ist auch kein String.
Wenn du lcd_string() nur ein char übergibst jagt es
quer durch den Speicher und gibt alles aus was nicht 0 ist.

Autor: Steffen O. (derelektroniker) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also soll ich dann "temp" mit unsigned char temp[1] initialisieren, und 
immer wenn es gebraucht wird eben temp[0] schreiben?
Und bei der Ausgabe mit lcd_string nicht einen einzelnen Wert (temp[0]), 
sondern einfach lcd_string(temp) ?

Wenn dann alles ausgegeben wird, was nicht 0 ist, würde das erklären, 
warum da überall irgendwelche Zeichen auf dem Display erscheinen.
Ich werde es mal versuchen.

Gruß, Steffen

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein, du solltest eine LCD-Funktion benutzen, die keinen String ausgibt, 
sondern nur ein einzelnes Zeichen, wie auch immer die bei der LCD-Lib 
heißen mag (geben tut es sie bestimmt, vielleicht lcd_putc?).

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gibt es ein lcd_char() oder lcd_byte() in deiner LIB?
Dann nimm das.

Autor: Steffen O. (derelektroniker) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein, in meiner lib gibt es lcd_data, ich glaub mit dem gibt man immer 
nur ein Zeichen aus. Ganz sicher bin ich mir aber nicht, ich werde es 
schnell mal nachprüfen. Wenn es das richtige sein sollte, einfach alle 
lcd_string durch lcd_data ersetzen?

Gruß, Steffen

Autor: Steffen O. (derelektroniker) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei lcd_data steht: Sendet ein Datenbyte an das LCD
Das wird dann das richtige sein, oder?

Gruß, Steffen

Autor: Steffen O. (derelektroniker) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So, hab nun mal alle lcd_string durch lcd_data ersetzt, nun komt nach 
dem Einschalten UART Frame Error (die Meldung kommt eigentlich jedesmal, 
egal was ich am Code veränder!), und dann nur noch das Zeichen E, in 
beiden Zeilen.

Gruß, Steffen

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>So, hab nun mal alle lcd_string durch lcd_data

Nein ! Ich dreh durch :( Doch nicht ALLE.
Nur die wo nur EIN Zeichen übergeben wird.

Autor: Steffen O. (derelektroniker) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
holger wrote:
>>So, hab nun mal alle lcd_string durch lcd_data
>
> Nein ! Ich dreh durch :( Doch nicht ALLE.
> Nur die wo nur EIN Zeichen übergeben wird.

Ja, ich hab natürlich nur die geändert, wo ein Zeichen übergeben wird, 
bei denen, wo ein String übergeben wird, steht natürlich noch 
lcd_string.

Gruß, Steffen

Autor: Claudio (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Steffan

Wo hast du deinen GPS Empfänger her?
Weiss jemand wo man günstig GPS Empfänger herbekommt?

Ich bräuchte auch ein paar... so günstig wie möglich... :)

Liebe Grüsse
Claudio

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.