speicher fehler atmega8

Gast #1450847
Lesenswert?

Hi,
habe seit 2 tagen meinen Asuro fertig und auch schon fleißig 
programmiert.
Hat bis vor ner Stunde auch alles geklappt.
Habe dann ein Programm drauf gespielt um den Asuro mit der Fernbedienung 
zu steuern.

************************************************************************ 
*******
*
* Description: Asuro lässt sich per IR-Fernbedienung steuern
*
************************************************************************ 
*****/
#include "asuro.h"
#include <stdlib.h>

#define CH_DN   0x21
#define CH_UP   0x20
#define VOL_DN  0x11
#define VOL_UP  0x10
#define FULL_SCRN  0x2E
#define ZERO     0x00

#define OFFSET   100
#define STEP   60

int speedLeft,speedRight;
volatile unsigned int rxdata;
volatile unsigned char rxbits;

SIGNAL (SIG_OVERFLOW0)
{
   rxbits++;
   rxdata<<=1;
   rxdata |= (PIND & (1 << PD0));   // liest Datenbits
   TCNT0 = 34;                     // Timer auf 1778µs
   if(rxbits==14){
      TCCR0 &= ~((1 << CS01) | (1 << CS00)); // stoppt Timer
   }
}

void Driver(void)
{
   unsigned char leftDir = FWD, rightDir = FWD;

   leftDir = rightDir = FWD;
   if (speedLeft < 0)  leftDir = RWD;
   if (speedRight < 0) rightDir = RWD;

   if (speedLeft >   240) speedLeft  =  240;
   if (speedLeft <  -240) speedLeft  = -240;
   if (speedRight >  240) speedRight =  240;
   if (speedRight < -240) speedRight = -240;

   MotorDir(leftDir,rightDir);
   MotorSpeed(abs(speedLeft),abs(speedRight));
}

void IRFwd(void)
{
   speedRight += STEP;
   speedLeft  += STEP;
   if (abs(speedLeft) < OFFSET) {speedRight += STEP; speedLeft += STEP;}
   FrontLED(ON);
   BackLED(OFF,OFF);
}

void IRRwd(void)
{
   speedRight -= STEP;
   speedLeft  -= STEP;
   if (abs(speedLeft) < OFFSET) {speedRight -= STEP; speedLeft -= STEP;}
   FrontLED(OFF);
   BackLED(ON,ON);
}

void IRLeft (void)
{
   FrontLED(OFF);
   BackLED(ON,OFF);
   if (speedLeft != 0){
      speedLeft /= 4;
      Driver();
      Msleep(80);
      speedLeft *= 4;
   }
   else{
      speedLeft = -150; speedRight = 150;
      Driver();
      Msleep(80);
      speedLeft = speedRight = 0;
   }
}

void IRRight (void)
{
   FrontLED(OFF);
   BackLED(OFF,ON);
   if (speedRight != 0){
      speedRight /= 4;
      Driver();
      Msleep(80);
      speedRight *= 4;
   }
   else{
      speedLeft = 150; speedRight = -150;
      Driver();
      Msleep(80);
      speedLeft = speedRight = 0;
   }
}

void IRStop(void)
{
   speedRight = speedLeft = 0;
   FrontLED(OFF);
   BackLED(OFF,OFF);
}

int main(void)
{
   static unsigned int cmd;

   Init();
   for (;;) {
      rxbits = 1; rxdata = 0;
      TIMSK |= (1 << TOIE0);      // Interrupt scharf
      while(PIND & (1 << PD0)); // warte auf 1. Flanke
      TCNT0 = 90;               // Timer auf 1333µs
      TCCR0 = (1 << CS01) | (1 << CS00); // Start Timer
      while(rxbits < 14); // warte bis alle Bits empfangen

      cmd = (rxdata & 0x3F);   // 6 Command-Bits werden verwertet

      switch (cmd) {
         case CH_DN :      IRRwd(); break;
         case CH_UP :      IRFwd(); break;
         case VOL_DN:      IRLeft(); break;
         case VOL_UP:      IRRight(); break;
         case ZERO :
         case FULL_SCRN :   IRStop(); break;
      }
      Driver();
   }
   return 0;
}
************************************************************************ 
**


Hat auch halbwegs gut geklappt.
Tja, und dann... wollte ich wieder ein normales "Fahr den Raum ab" drauf 
flashen, aber dann kam folgendes

Open COM1 --> OK !
Bulding RAM --> OK !
Connect to ASURO --> OK !
Sending Page 001 of 029 --> v.v.v.v.v.v.v.v.v.v.
TIMEOUT !
Not successful, Flash contents will be invalid!

Was ist passiert??? Auf dem Hyperterminal die IR vom Transceiver 
gecheckt. Läuft. Nur mit dem flashen geht garnix mehr.

Was kann ich machen ???
HELP plz

grüße
Gast #1451068
Lesenswert?

Der Speicher wurde max. 20 mal geflasht.
Das Programmiertool kann es auch nicht sein, da ich einen von dem 
Hersteller zum test mitgeliefertem Code versucht habe zu flashen.
Die Verbindung wird laut flashtool hergestellt (Connect to ASURO --> OK 
!)
 nur bei der Übertragung scheiterts eben. (Sending Page 001 of 029 --> 
v.v.v.v.v.v.v.v.v.v.)

Und es wird ein flash Fehler im Prozessor gemeldet (Not successful, 
Flash contents will be invalid!)
Soweit ich das verstehe. Wie kann ich ausser über IR, was ja nicht mehr 
geht, auf den Prozessor zugreifen? Gibts da Adapter o.Ä. zu kaufen ?
Bin neu auf dem Gebiet.

Flo
Persönliche Seite #1451157
Lesenswert?

Florian schrieb:

> Der Speicher wurde max. 20 mal geflasht.
> Das Programmiertool kann es auch nicht sein, da ich einen von dem
> Hersteller zum test mitgeliefertem Code versucht habe zu flashen.
> Die Verbindung wird laut flashtool hergestellt (Connect to ASURO --> OK
> !)
>  nur bei der Übertragung scheiterts eben. (Sending Page 001 of 029 -->
> v.v.v.v.v.v.v.v.v.v.)
>
> Und es wird ein flash Fehler im Prozessor gemeldet (Not successful,
> Flash contents will be invalid!)

Das Handbuch vom Asuro 
(http://www.arexx.com/downloads/asuro/asuro_manual_en.pdf) geht im 
Abschnitt 8.4 auf diese Flash Fehler ein. v bedeutet verify error, d.h. 
der Bootloader schreibt was ins Flash, liest aber anschliessend was 
anderes aus!

Die Ursache kann ein ausgelutschtes Flash sein (>10000 Flashvorgänge). 
Bei deinem Asuro ist die Grenze aber noch nicht erreicht, d.h. ein 
anderer Fehler liegt vor.

Eine weitere Ursache könnte sein, dass der Asuro beim Programmieren 
instabilen Saft hat - hast du das Programmieren schon mit voll 
aufgeladenen Akkus oder neuen Batterien versucht?

Preventing Flash Corruption
http://www.ladyada.net/wiki/doku.php?id=microcontroller_annoyances

Wenn das nix hilft, würde ich an deiner Stelle Kontakt zum Hersteller 
aufnehmen, auf die Probleme hinweisen und versuchen den Atmega8 gegen 
ein neues Exemplar zu tauschen.

> Soweit ich das verstehe. Wie kann ich ausser über IR, was ja nicht mehr
> geht, auf den Prozessor zugreifen? Gibts da Adapter o.Ä. zu kaufen ?

Das ist normalerweise nicht vorgesehen, siehe 
http://www.asurowiki.de/pmwiki/pmwiki.php/Main/Bootloader

Im Wiki steht auch
"Die ISP Schnittstelle ist beim Original ASURO Prozessor abgeschaltet 
und kann nur durch einen Chip Erase wieder eingeschaltet werden. Leider 
ist durch den Chip Erase aber auch der Bootloader weg."

Wenn eine Einigung mit dem Hersteller nicht gelingt, steht ein Austausch 
deines Atmega8 an. Entweder mit einem bereits bespielten vom Asuro 
Hersteller mit dem originalen Bootloader oder einen "leeren" von einem 
beliebigen Elektronikhändler.

Im Fall 2 (jungfräulicher Atmega8 oder gleich der fettere Atmega168) 
brauchst du einen Helfer zum Einprogrammieren eines alternativen 
Bootloaders oder du baust dir selbst eine kleine ISP Schnittstelle auf. 
Wie das geht, siehst du auf 
http://www.asurowiki.de/pmwiki/pmwiki.php/Main/AsuroErweiterung und im 
AVR-Tutorial.

Eventuell gibt es auch eine Asuro-Community, die weiterhelfen kann.
Gast #1451219
Lesenswert?

ok, dank dir.
Dann werde ich mich mit dem Hersteller in Verbindung setzen und schauen 
dass ich einen asuro atmel bekomme. Da ich anfänger bin ist es so glaub 
ich besser.

Dieses Problem hat mir eindeutig gezeigt, dass ich nicht gleich mit 
kompletten Systemen anfangen sollte.
Gibt es einstiegs Lernpakete die etwas taugen? Ich hab mittlerweile 
soviele gesehen aber kann sie als anfänger nicht einschätzen.
Ich möchte sogern in die Welt der Mikrocontroller und Elektronik 
einsteigen. Um später auch eigene Schaltungen Regelungen zu entwerfen. 
Mit was fängt man da an?
Bin für jeden Vorschlag dankbar.
Gast #1451327
Lesenswert?

So seh ich das mittlerweile auch. Nur so als anfänger, wenn man überall 
liest - kauf den  !! Kauft ma den :-)
Für später evtl ganz witzig mit dem ding weng zu basteln , erweitern 
etc.
Nur im moment macht das noch keinen Sinn. Will ja hauptsächlich die 
Schaltungs-und Bearbeitungstechnik lernen und nicht vorrangig mit C 
rumspielen.Hat ich jetzt lange genug im Studium.
Mach mich dann doch mal an das AVR-Tut, bei Fragen nerv ich weiter.
Danke schonmal.
Bis denn..

Flo

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren