mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik speicher fehler atmega8


Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: flasher (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mehr als 10.000 mal geflash? Dann neuen mega8 nehmen :-)

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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=microcontr...

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/Asu... und im 
AVR-Tutorial.

Eventuell gibt es auch eine Asuro-Community, die weiterhelfen kann.

Autor: florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: xxt (Gast)
Datum:

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

Autor: florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

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.