Forum: Mikrocontroller und Digitale Elektronik speicher fehler atmega8


von Florian (Gast)


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

von flasher (Gast)


Lesenswert?

Mehr als 10.000 mal geflash? Dann neuen mega8 nehmen :-)

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Die Frage hat mit dem Betreff "speicher fehler atmega8" nichts zu tun.

Wie erkennt der ASURO, dass er (über IR?) programmiert werden soll und 
dass keine IR-Fernbedienungskommandos kommen?

von Peter D. (peda)


Lesenswert?

Dein ATmega8 ist mit Sicherheit nicht kaputt.
Du hast ein Problem mit dem speziellen ASURO-Programmiertool (welches 
ich nicht kenne).
Gibts bei Asuro keine Hilfe, Troubleshooting, FAQs?


Peter

von Florian (Gast)


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

von Stefan B. (stefan) Benutzerseite


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.

von florian (Gast)


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.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Ich bin Anhänger der Lowcost-und-dafür-mehr-Selbermachen-Lösung. Deshalb 
mein Tipp: Hier viel mitlesen und das AVR-Tutorial durchackern dann 
fragen bei Unklarheiten.

von xxt (Gast)


Lesenswert?

ich weiss das hier im forum irgendwo was zum beschiebenen problem 
steht.... das ding is einfach scheiße

von florian (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.