mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Zustand am Port-Pin ändert sich beim "einlesen"


Autor: Mira (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Abend,

ich hab eine Frage bezüglich dem Einlesen eines Pins. Vorab muss ich 
gestehen, dass ich in Sachen µC noch nicht wirklich fit bin.

Ich möchte die DevID des PIC18F4550 auslesen. Die benötigte Clk als auch 
die Befehle (Data) generiere ich über folgende Anweisung:
...
int x;
  x = (int)data[3];
  switch ((int)data[1])
  {
   ...
   case 93:
          switch ((int)data[2])
    {
         ...
               case 6: TRISBbits.TRISB6 = 0; Delay10KTCYx(10); LATBbits.LATB6 = x; break;
               case 7: TRISBbits.TRISB7 = 0; Delay10KTCYx(10); LATBbits.LATB7 = x; break;
               default: break;
           }
wobei RB6 für die clk und RB7 für data genutzt wird. Das funktioniert 
soweit auch alles.

Nun möchte ich wie in "Flash Microcontroller Programming Specification" 
(E9D6C43d01) beschrieben, über folgende Funktion die empfangenden Daten 
auslesen:
 

switch ((int)data[1]) 
  {
   ...
   case 7: TRISBbits.TRISB7 = 1; Delay10KTCYx(10); data[0] =PORTBbits.RB7; break;
   }
...


Mein Problem: sobald ich diese Anweisung ausführe, springt der Pegel an 
diesem Pin auf high. Meine Frage: ist der Lesebefehl evt falsch?

Ich würde mich freuen, wenn mir jemand weiterhelfen könnte.

Autor: Lehrmann Michael (ubimbo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

also:

Mira schrieb:
> ich hab eine Frage bezüglich dem Einlesen eines Pins.

Mira schrieb:
> Ich möchte die DevID des PIC18F4550 auslesen.

Ich kapier noch nicht ganz was du vor hast. Taster oder DevID?
Du willst doch nicht den Clk per Taster erzeugen oder ? Ich steh noch 
auf de m Schlauch.

Mira schrieb:
> Nun möchte ich wie in "Flash Microcontroller Programming Specification"
> (E9D6C43d01) beschrieben, über folgende Funktion die empfangenden Daten
> auslesen:
>
>
> switch ((int)data[1])
>   {
>    ...
>    case 7: TRISBbits.TRISB7 = 1; Delay10KTCYx(10); data[0] =PORTBbits.RB7; 
break;
>    }
> ...
>
>
> Mein Problem: sobald ich diese Anweisung ausführe, springt der Pegel an
> diesem Pin auf high. Meine Frage: ist der Lesebefehl evt falsch?

Vielleicht werden da Daten / Clk ausgegeben? Hast du mal ein Oszi 
drangehalten oder wie bemerkst du, dass der Pin high wird ?

Interessehalber noch: Was um Gottes Willen willst du mit der DevID ?

Was noch hilfreich wäre: Configbits, GESAMTER QUELLCODE und die 
Schaltung.

Das bekommen wir schon noch hin.

Autor: Mira (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
:)

Im Grunde möchte ich zum testen die Device ID eines DUTS (in diesem Fall 
einem PIC18F4550) über einen Steuerpic (ebenfalls ein PIC18F4550) 
auslesen. Dazu erzeuge ich über das Setzen zwei beliebiger Pins - in dem 
Fall RB6 und RB7 - sowohl die clk als auch die benötigten Anweisungen.

Bsp:
set table pointer (Addr[21:16])
um diese Anweisung an den PIC zu senden gehe ich wie folgt vor:

1. MCLR auf high setzen um das DUT in den Programmiermodus zu versetzen
2. die Anweisung set table pointer (Addr[21:16]) erzeugen:

   a) 0000 4-Bit Command
      - RB7 (data) auf hig setzen
      - RB6 (clk) auf high setzen
      - RB6 auf low setzen
      - RB6 auf high setzen
      - RB6 auf low setzen
      - RB6 auf high setzen
      - RB6 auf low setzen
      - RB6 auf high setzen
      - RB6 auf low setzen
      - anschließend wie gefordert die clk zwei "Takte" auf low belassen

   b) MOVLW Adrr : 11111100 01110000
      - RB7 high
      - RB6 high
      - RB6 low
      ....

Somit generiere ich die geforderten Anweisungen alleine über das Setzen 
der Pins. So zumindest der Plan.

Um nun die zurückgelieferten Werte -in diesem Fall eben die DevID- auf 
dem PC wieder auszugeben, schalte ich nach der Anweisung: 1001 00000000 
den Pin RB7 auf Eingang. (Den benutze Code habe ich oben ja bereits 
gepostet). Sobald ich die Prozedur durchlaufe setzt er mir den Pin auf 
high und liefert mir als Ergebnis eine 1. Nachgemessen hab ich das ganze 
mit einem Multimeter - Oszi hab ich im Augenblick nicht zur Hand.

Meine Configs:
#pragma config PLLDIV   = 5       // (20 MHz input)
#pragma config CPUDIV   = OSC1_PLL2
#pragma config USBDIV   = 2       // Clock source from 96MHz PLL/2
#pragma config FOSC     = HSPLL_HS
//#pragma config FCMEN    = OFF
#pragma config IESO     = OFF
#pragma config PWRT     = ON
#pragma config BOR      = OFF
//#pragma config BORV     = 3
#pragma config VREGEN   = ON
#pragma config WDT      = OFF
#pragma config WDTPS    = 32768
#pragma config MCLRE    = OFF
#pragma config LPT1OSC  = OFF
#pragma config PBADEN   = OFF
#pragma config CCP2MX   = ON
#pragma config STVREN   = ON
#pragma config LVP      = OFF
//#pragma config ICPRT    = OFF     // Dedicated In-Circuit Debug/Programming
#pragma config XINST    = OFF       // Extended Instruction Set
#pragma config CP0      = OFF
#pragma config CP1      = OFF
#pragma config CP2      = OFF
//#pragma config CP3      = OFF
#pragma config CPB      = OFF
#pragma config CPD      = OFF
#pragma config WRT0     = OFF
#pragma config WRT1     = OFF
#pragma config WRT2     = OFF
//#pragma config WRT3     = OFF
#pragma config WRTB     = OFF       // Boot Block Write Protection
#pragma config WRTC     = OFF
#pragma config WRTD     = OFF
#pragma config EBTR0    = OFF
#pragma config EBTR1    = OFF
#pragma config EBTR2    = OFF
//#pragma config EBTR3    = OFF
#pragma config EBTRB    = OFF

Ich weiss, das ich das Ganze über diverse Routinen umsetzen könnte - ich 
möchte jedoch diese Routinen alleine über das "Toggeln" der I/O 
Leitungen erzeugen.

mfG Mira

Autor: Mira (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Noch eine Anmerkung: Ich bekomme als DevID1 und DevID2 folgendes 
geliefert: 1111 1111 - was definitiv falsch ist, da DevID1 = 06h und 
DevID2 = 12h lauten müsste.

Autor: Anja (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Mira schrieb:
> 1. MCLR auf high setzen um das DUT in den Programmiermodus zu versetzen

Du weißt aber schon daß High für MCLR beim Programmieren zwischen VDD+4V 
(z.B. 9,5V) und +12,5V liegen muß?

Es sei denn du aktivierst und verwendest den LVP-Modus
(#pragma config LVP      = ON)
Da brauchst Du aber noch RB5 zum programmieren.

Gruß Anja

Autor: Mira (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Anja - vielen Dank für den Tipp.  Gruß Mira

Autor: Lehrmann Michael (ubimbo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Mira schrieb:
> Den benutze Code habe ich oben ja bereits
> gepostet).

Ich weiß ich hätt ihn doch gerne noch ganz gesehen. Ich muss bei 
sovielen "..." soviel denken =)

MCLR sollte erfahrungsgemäß deutlich größer 10V sein. Von LVP würde ich 
dir erstmal abraten.

Den PowerUpTimer hast du auch beim anderen PIC beachtet? Nicht, dass der 
gleich lossendet obwohl sich der ZielPIC noch in POR befindet.

Die Configs sehen eigentlich super aus. Wenn ich mich recht entsinne 
hast du jetzt 48 MHz intern.

Wäre cool wenn du nochmal den ganzen Code hättest. Würde unglaublich 
helfen.

Mira schrieb:
> Ich weiss, das ich das Ganze über diverse Routinen umsetzen könnte - ich
> möchte jedoch diese Routinen alleine über das "Toggeln" der I/O
> Leitungen erzeugen.

Man kann's so machen =)

Autor: Mira (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Michael hier der Code:

/*********************************************************************
 * FileName:        user.c
 * Dependencies:    See INCLUDES section below
 * Processor:       PIC18
 * Compiler:        C18 2.30.01+
 * Company:         Microchip Technology, Inc.
 *
 * modified by sprut
 *
 ********************************************************************/

/** I N C L U D E S **********************************************************/
#include <p18cxxx.h>
#include <usart.h>
#include "system\typedefs.h"
#include "system\usb\usb.h"
#include "io_cfg.h"             // I/O pin mapping
#include "user\user.h"
#include "lcd.h"


/** Configuration ********************************************************/
#pragma config PLLDIV   = 5       // (20 MHz input)
#pragma config CPUDIV   = OSC1_PLL2
#pragma config USBDIV   = 2       // Clock source from 96MHz PLL/2
#pragma config FOSC     = HSPLL_HS
//#pragma config FCMEN    = OFF
#pragma config IESO     = OFF
#pragma config PWRT     = ON
#pragma config BOR      = OFF
//#pragma config BORV     = 3
#pragma config VREGEN   = ON
#pragma config WDT      = OFF
#pragma config WDTPS    = 32768
#pragma config MCLRE    = OFF
#pragma config LPT1OSC  = OFF
#pragma config PBADEN   = OFF
#pragma config CCP2MX   = ON
#pragma config STVREN   = ON
#pragma config LVP      = OFF
//#pragma config ICPRT    = OFF     // Dedicated In-Circuit Debug/Programming
#pragma config XINST    = OFF       // Extended Instruction Set
#pragma config CP0      = OFF
#pragma config CP1      = OFF
#pragma config CP2      = OFF
//#pragma config CP3      = OFF
#pragma config CPB      = OFF
#pragma config CPD      = OFF
#pragma config WRT0     = OFF
#pragma config WRT1     = OFF
#pragma config WRT2     = OFF
//#pragma config WRT3     = OFF
#pragma config WRTB     = OFF       // Boot Block Write Protection
#pragma config WRTC     = OFF
#pragma config WRTD     = OFF
#pragma config EBTR0    = OFF
#pragma config EBTR1    = OFF
#pragma config EBTR2    = OFF
//#pragma config EBTR3    = OFF
#pragma config EBTRB    = OFF




/** V A R I A B L E S ********************************************************/
// hier die variablen definieren...
#pragma udata
byte data[20];   // bis 64bytes möglich, oder dann descriptor(?) ändern
BYTE _data[1];
typedef unsigned char T_Bitvar;

typedef struct
{
    unsigned bit0:1;
    unsigned bit1:1;
    unsigned bit2:1;
    unsigned bit3:1;
    unsigned bit4:1;
    unsigned bit5:1;
    unsigned bit6:1;
    unsigned bit7:1;
} T_Bitvar;

T_Bitvar bitvar1[1]; 




/** D E C L A R A T I O N S **************************************************/
// hier persönliche initialisierungen definieren...
#pragma code
void UserInit(void) {
     LATB &= 0x00;
     TRISB = 0x00;
      //LCD_Init();
     ADCON1 &= 0x0F;
}//end UserInit


void setpin (void)
{
  // data[1] = port
  // data[2] = pin
  // data[3] = level

  int x;
  x = (int)data[3];
  switch ((int)data[1])
  {
   case 92: 
           //LATA &= 0x00;
           //TRISA = 0x00;
           switch ((int)data[2])
       {
               case 3: TRISAbits.TRISA3 = 0; Delay10KTCYx(10); LATAbits.LATA3 = x; break;
               case 4: TRISAbits.TRISA4 = 0; Delay10KTCYx(10); LATAbits.LATA4 = x; break;
               case 5: TRISAbits.TRISA5 = 0; Delay10KTCYx(10); LATAbits.LATA5 = x; break;
               case 6: TRISAbits.TRISA6 = 0; Delay10KTCYx(10); LATAbits.LATA6 = x; break;
           }
   break;//end port a

     case 93: 
      //LATB &= 0x00;
          //TRISB = 0x00;
          switch ((int)data[2])
       {
         case 0: TRISBbits.TRISB0 = 0; Delay10KTCYx(10); LATBbits.LATB0 = x; break;
               case 1: TRISBbits.TRISB1 = 0; Delay10KTCYx(10); LATBbits.LATB1 = x; break;
               case 2: TRISBbits.TRISB2 = 0; Delay10KTCYx(10); LATBbits.LATB2 = x; break;
               case 3: TRISBbits.TRISB3 = 0; Delay10KTCYx(10); LATBbits.LATB3 = x; break;
               case 4: TRISBbits.TRISB4 = 0; Delay10KTCYx(10); LATBbits.LATB4 = x; break;
               case 5: TRISBbits.TRISB5 = 0; Delay10KTCYx(10); LATBbits.LATB5 = x; break;
               case 6: TRISBbits.TRISB6 = 0; Delay10KTCYx(10); LATBbits.LATB6 = x; break;
               case 7: TRISBbits.TRISB7 = 0; Delay10KTCYx(10); LATBbits.LATB7 = x; break;
               default: break;
           }
     break;// end port b
   case 94: 
         //LATC &= 0x00;
         //TRISC = 0x00; 
         switch ((int)data[2])
       {
               case 1: TRISCbits.TRISC1 = 0; Delay10KTCYx(10); LATCbits.LATC1 = x; break;
               case 2: TRISCbits.TRISC2 = 0; Delay10KTCYx(10); LATCbits.LATC2 = x; break;
               case 6: TRISCbits.TRISC6 = 0; Delay10KTCYx(10); LATCbits.LATC6 = x; break;
               case 7: TRISCbits.TRISC7 = 0; Delay10KTCYx(10); LATCbits.LATC7 = x; break;
               break;
           }
     break;// end port c
     case 95: 
         //LATD &= 0x00;
         //TRISD = 0x00; 
         switch ((int)data[2])
       {
               case 0: TRISDbits.TRISD0 = 0; Delay10KTCYx(10); LATDbits.LATD0 = x; break;
               case 1: TRISDbits.TRISD1 = 0; Delay10KTCYx(10); LATDbits.LATD1 = x; break;
               case 2: TRISDbits.TRISD2 = 0; Delay10KTCYx(10); LATDbits.LATD2 = x; break;
               case 3: TRISDbits.TRISD3 = 0; Delay10KTCYx(10); LATDbits.LATD3 = x; break;
               case 4: TRISDbits.TRISD4 = 0; Delay10KTCYx(10); LATDbits.LATD4 = x; break;
               case 5: TRISDbits.TRISD5 = 0; Delay10KTCYx(10); LATDbits.LATD5 = x; break;
               case 6: TRISDbits.TRISD6 = 0; Delay10KTCYx(10); LATDbits.LATD6 = x; break;
               case 7: TRISDbits.TRISD7 = 0; Delay10KTCYx(10); LATDbits.LATD7 = x; break;
               break;
           }
     break;// end port d
     case 96: 
        //LATE &= 0x00;
        //TRISE = 0x00;
        switch ((int)data[2])
       {
               case 0: TRISEbits.TRISE0 = 0; Delay10KTCYx(10); LATEbits.LATE0 = x; break;
               case 1: TRISEbits.TRISE1 = 0; Delay10KTCYx(10); LATEbits.LATE1 = x; break;
               case 2: TRISEbits.TRISE2 = 0; Delay10KTCYx(10); LATEbits.LATE2 = x; break;
               break;           }
     break;// end port e
  }
}

void setport (void)
{
  //data[1] = port
  //data[2]-[9] = bitfolge
  
  int bit0;
  int bit1;
  int bit2;
  int bit3;
  int bit4;
  int bit5;
  int bit6;
  int bit7;
  
  bit0 = (int)data[2];
  bit1 = (int)data[3];
  bit2 = (int)data[4];
  bit3 = (int)data[5];
  bit4 = (int)data[6];
  bit5 = (int)data[7];
  bit6 = (int)data[8];
  bit7 = (int)data[9];

  switch ((int)data[1])
  {
     case 92:  
     break;
   case 93:  LATB &= 0x00;
               TRISB = 0x00;
               LATBbits.LATB0 = bit0;
         LATBbits.LATB1 = bit1;
          LATBbits.LATB2 = bit2;
         LATBbits.LATB3 = bit3;
         LATBbits.LATB4 = bit4;
         LATBbits.LATB5 = bit5;
          LATBbits.LATB6 = bit6;
          LATBbits.LATB7 = bit7; 
     break;
   case 94:  
     break;
     case 95:  LATD &= 0x00;
               TRISD = 0x00;
         LATDbits.LATD0 = bit0;
         LATDbits.LATD1 = bit1;
          LATDbits.LATD2 = bit2;
         LATDbits.LATD3 = bit3;
         LATDbits.LATD4 = bit4;
         LATDbits.LATD5 = bit5;
          LATDbits.LATD6 = bit6;
          LATDbits.LATD7 = bit7;
     break;
     case 96:  LATE &= 0x00;
               TRISE = 0x00;
               LATEbits.LATE0 = bit0;
         LATEbits.LATE1 = bit1;
          LATEbits.LATE2 = bit2;;
     break;
  }
}



void getport (void)
{
  // data[1] = Port

  switch ((int)data[1]){ 
         case 92:  TRISA = 0xFF;
                   Delay10KTCYx(100);
                   data[0] = PORTA;
                   break;
       case 93:  TRISB = 0xFF;
                   Delay10KTCYx(100);
                   data[0] = PORTB;
                   break;
       case 94:  TRISC = 0xFF;
           Delay10KTCYx(100);
                   data[0] = PORTC;
                   break;
         case 95:  TRISD = 0xFF;
           Delay10KTCYx(100);
                   data[0] = PORTD;
                   break;
         case 96:  TRISE = 0xFF;
           Delay10KTCYx(100);
                   data[0] = PORTE;
                   break;
  }
}

void getpin (void)
{
  // data[1] = port
  // data[2] = Pin

switch ((int)data[1]) 
  {
    case 92:  //TRISA = 0xFF;
              switch ((int)data[2]){   
              case 0: TRISAbits.TRISA0 = 1; Delay10KTCYx(10); data[0] =PORTAbits.RA0; break;
              case 1: TRISAbits.TRISA1 = 1; Delay10KTCYx(10); data[0] =PORTAbits.RA1; break;
              case 2: TRISAbits.TRISA2 = 1; Delay10KTCYx(10); data[0] =PORTAbits.RA2; break;
              case 3: TRISAbits.TRISA3 = 1; Delay10KTCYx(10); data[0] =PORTAbits.RA3; break;
              case 4: TRISAbits.TRISA4 = 1; Delay10KTCYx(10); data[0] =PORTAbits.RA4; break;
              case 5: TRISAbits.TRISA5 = 1; Delay10KTCYx(10); data[0] =PORTAbits.RA5; break;
              case 6: TRISAbits.TRISA6 = 1; Delay10KTCYx(10); data[0] =PORTAbits.RA6; break;
              }
     break;
   case 93: //PORTB = 0;
              //TRISB = 0xFF;
              switch ((int)data[2]){
              case 0: TRISBbits.TRISB0 = 1; Delay10KTCYx(10); data[0] =PORTBbits.RB0; break;
              case 1: TRISBbits.TRISB1 = 1; Delay10KTCYx(10); data[0] =PORTBbits.RB1; break;
              case 2: TRISBbits.TRISB2 = 1; Delay10KTCYx(10); data[0] =PORTBbits.RB2; break;
              case 3: TRISBbits.TRISB3 = 1; Delay10KTCYx(10); data[0] =PORTBbits.RB3; break;
              case 4: TRISBbits.TRISB4 = 1; Delay10KTCYx(10); data[0] =PORTBbits.RB4; break;
              case 5: TRISBbits.TRISB5 = 1; Delay10KTCYx(10); data[0] =PORTBbits.RB5; break;
              case 6: TRISBbits.TRISB6 = 1; Delay10KTCYx(10); data[0] =PORTBbits.RB6; break;
              case 7: TRISBbits.TRISB7 = 1; Delay10KTCYx(10); data[0] =PORTBbits.RB7; break;
              }
     break;
   case 94: //TRISC = 0xFF;
              switch ((int)data[2]){
              case 0: TRISCbits.TRISC0 = 1; Delay10KTCYx(10); data[0] =PORTCbits.RC0; break;
              case 1: TRISCbits.TRISC1 = 1; Delay10KTCYx(10); data[0] =PORTCbits.RC1; break;
              case 2: TRISCbits.TRISC2 = 1; Delay10KTCYx(10); data[0] =PORTCbits.RC2; break;
              case 6: TRISCbits.TRISC6 = 1; Delay10KTCYx(10); data[0] =PORTCbits.RC6; break;
              case 7: TRISCbits.TRISC7 = 1; Delay10KTCYx(10); data[0] =PORTCbits.RC7; break;
              }
     break;
     case 95: //TRISD = 0xFF;
              switch ((int)data[2]){
              case 0: TRISDbits.TRISD0 = 1; Delay10KTCYx(10); data[0] =PORTDbits.RD0; break;
              case 1: TRISDbits.TRISD1 = 1; Delay10KTCYx(10); data[0] =PORTDbits.RD1; break;
              case 2: TRISDbits.TRISD2 = 1; Delay10KTCYx(10); data[0] =PORTDbits.RD2; break;
              case 3: TRISDbits.TRISD3 = 1; Delay10KTCYx(10); data[0] =PORTDbits.RD3; break;
              case 4: TRISDbits.TRISD4 = 1; Delay10KTCYx(10); data[0] =PORTDbits.RD4; break;
              case 5: TRISDbits.TRISD5 = 1; Delay10KTCYx(10); data[0] =PORTDbits.RD5; break;
              case 6: TRISDbits.TRISD6 = 1; Delay10KTCYx(10); data[0] =PORTDbits.RD6; break;
              case 7: TRISDbits.TRISD7 = 1; Delay10KTCYx(10); data[0] =PORTDbits.RD7; break;
              }
     break;
     case 96: //TRISE = 0xFF;
              switch ((int)data[2]){
              case 0: TRISEbits.TRISE0 = 1; Delay10KTCYx(10); data[0] =PORTEbits.RE0; break;
              case 1: TRISEbits.TRISE1 = 1; Delay10KTCYx(10); data[0] =PORTEbits.RE1; break;
              case 2: TRISEbits.TRISE2 = 1; Delay10KTCYx(10); data[0] =PORTEbits.RE2; break;
              }              
     break;
  }

}

void pause(void)
{
  Delay10KTCYx(10);
}


/** " M A I N " - P R O G R A M ********************************************/

void ProcessIO(void) {
    if(USBGenRead(data,20)) {
    switch ((int)data[0]) {                    // entscheidet anhand des ersten Bytes um welchen fall 
      case 0:  pause();
                    break;
      case 1: setpin();                      // port, pin, zustand
                    break;
      case 2: setport();
          break;                         // port, bitfolge
      case 3: getpin(); 
                    if(!mUSBGenTxIsBusy())
              USBGenWrite(data,1);
                    break;                         // pin, port
            case 4: getport();
          if(!mUSBGenTxIsBusy())
            USBGenWrite(data,1);       // port             
          break;
            case 5: getpin();
          if(!mUSBGenTxIsBusy())
            USBGenWrite(data,1);       // port             
          break;
    }
  }
}//end ProcessIO


Ich hab die LVP-Variante versucht - musste aber feststellen, dass er das 
gleiche wie zuvor macht. Irgendetwas läuft da falsch ....

Autor: Mira (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich noch mal :) ... Ich hab jetzt mal die internen Pull-Ups von PortB 
ausgeschaltet - und siehe da, er zieht den Pin beim einlesen nicht mehr 
auf high.

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.