www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PIC C18 variable wird nicht gespeichert


Autor: Tweaker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

hab folgendes Problem.
Mit der Variable prog_modi soll die Betriebsart eingestellt werden, aber 
der macht das nicht. Er beschreibt die Variable nicht, sie bleibt auf 
dem initialisierten Wert.

Ich verwende C18 auf dem 18F45k20.
Kann das mit dem Uart zusammenhängen?
while (1){
// Programmzustand einstellen und RS232-Kommunikation
RXinput = getChar();
rx = RXinput;

if ( rx != 0){
  LATD = rx;
  if(rx == 252)
  {
    putChar(prog_mode);
  }
  if(rx == 253)
  {
    prog_mode = 0;
  }
  if(rx == 254)
  {
    prog_mode = 1;
  }
  if(rx == 255)
  {
    prog_mode = 2;
  }
  if(rx < 252)
  {
    rs232 = rx;
  }
}

// Steuerung des Servos aus unterschiedlichen Quellen
switch(prog_mode)
{
   case 0: Impuls_Servo_var = schalter8;
   break;
   case 1: Impuls_Servo_var =(char)(ADC_Convert()*0.694);
   break;
   case 2: Impuls_Servo_var = rs232;
   break;
   default : break;
}

// Anzeige der Servo-Position/Geschwindigkeit auf Board-LEDs
//LATD = Impuls_Servo_var;
}

THX im Voraus

Autor: PIC_Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Heißt die Variable prog_modi oder prog_mod und wo ist sie deklariert?

Autor: Tweaker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
prog_mode natürlich war ein Tippfehler.

Hier noch die globale Deklarierung und Initialisierung:
static unsigned char prog_mode = 2;
static unsigned char RXinput;

Autor: morph1 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
beim PIC18 ist das Attribut "static" gleichbedeutend mit der Ablage der 
"Variablen" im Programmspeicher -> static == statisch == unveränderlich 
:)

Nimm also mal das static weg.

Autor: Tweaker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hab ich gemacht, aber der Effekt ist der selbe.

Mit folgender zeile kann ich sehen das die Daten einwandfrei übertragen 
werden:
LATD = rx;


kann es sein, dass ein interrupt dazwischen kommt?

Autor: Tweaker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab festegestellt, dass alle internen variablen in der 
Endlosschleife wieder mit dem Standartwert überschrieben werden.

Wie kann das sein?
void main (void)
{
  unsigned int rs232 = 87;
  unsigned char rx = 0;
  unsigned char prog_mode = 2;
  unsigned char RXinput;

  OSCCON = 0x76;        // 16Mhz einstellen
  TRISD = 0b00000000;       // PORTD bits 7:0 are all outputs (0)
  TRISB = 0xff;    // Datenrichtungsregister fuer PORTC: Alle Pins auf Eingabe
  
  TRISAbits.TRISA1 = 0;  //PortA auf Ausgabe
  //Unbedingt notwendig beim Einlesen von Daten bei PIC16F688:
  ANSEL  = 0b00000000;    // Pins als digital I/O AD Wandler abschalten
  ANSELH = 0b00000000;    // Pins als digital I/O

    ADC_Init();
  init();
  init_rs232();
  
  Impuls_Servo_var = 70;
  
    while (1)
    {
    // Programmzustand einstellen und RS232-Kommunikation
    RXinput = getChar();
    rx = RXinput;
    
    if ( rx != 0)
    {
      LATD = prog_mode;
      if(rx == 252)
      {
        putChar(prog_mode);
      }
      if(rx == 253)
      {
        prog_mode = 0;
      }
      if(rx == 254)
      {
        prog_mode = 1;
      }
      if(rx == 255)
      {
        prog_mode = 2;  
      }
      if(rx < 252)
      {  
        rs232 = rx;
      }
    }

    // Steuerung des Servos aus unterschiedlichen Quellen
    switch(prog_mode)
    {
      case 0:   Impuls_Servo_var = schalter8;
              break;
      case 1:   Impuls_Servo_var =(char)(ADC_Convert()*0.694);
              break;
      case 2:    Impuls_Servo_var = rs232;
              break;
      default :    break;
    }

    // Anzeige der Servo-Position/Geschwindigkeit auf Board-LEDs
    //LATD = Impuls_Servo_var;
    }
}

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

Bewertung
0 lesenswert
nicht lesenswert
Tweaker schrieb:
> Ich hab festegestellt, dass alle internen variablen in der
> Endlosschleife wieder mit dem Standartwert überschrieben werden.
>
> Wie kann das sein?

Vielleicht stürzt dein µC einfach nur ab und das Programm beginnt 
ständig immer wieder von vorne?

Da du Servos im Code erwähnst: So ein Servo kann ganz unangenehme 
Störimpulse auf der Versorgungsspannung verursachen. Das wäre zb ein 
Grund, warum der µC abschmiert.

Autor: Tweaker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Super.................

Das wars... Servo abgehängt und sieh da.... es Funktioniert....

Reicht da ein Kondensator am Servo als entkopplung? 1uF?

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.