Forum: Mikrocontroller und Digitale Elektronik Fehlermeldung bei bschreiben von ATMega16


von mc t. (mct3)


Lesenswert?

Hallo Forengemeinde.

Ich bin in Sachen Microcontrollerprogrammierung blutiger Anfänger.
Mein erster Versuch ein hex auf einen ATMega32 zu schreiben ist 
fehlgeschlagen.
Andauernd kommt eine Fehlermeldung, wie "error service modul failed" 
oder so.

Da ich nunmal Anfänger bin, kann es natürlich sein, das ich bei dn 
ganzen Voreinstellungen Fehler gemacht hab. Was genau ich gesetzt habe, 
kann ich nicht sagen, da ich das Zeug im moment nicht zur verfügung 
stehen habe.

Noch kurz meine Ausrüstung:

AVR studio 5, STK500, ATMega 16-16PC

ich komm nicht mehr weiter, bitte helft mir...

FG

von mc t. (mct3)


Lesenswert?

Also vielleicht nochmal ne Stufe niedriger:

Ich habe ein Mini-programm in C geschrieben, kompiliert, ohne fehler.
Wenn ich auf Tools, programming chip gehe, erscheint ein Fenster mit 
mehreren "Karteikarten". Was muss ich anklicken oder auswählen, damit 
ich meinen ATMega16 geflasht kriege??

Also die fuses, board options, memory etc.

Ich hoffe, dass ihr erklärende Antworten habt...

von mc t. (mct3)


Lesenswert?

Was muss ich eigentlich machem, damit ich eine Antwort bekomme, bzw. was 
habe ich nicht gemacht??

P.S.: Fehlermeldung:

Executing Modules service command 'writeToMemory' with argument(s) 
[Module_3, Mem_prog_76, 0, 16384, 1] failed: TCF command: 
Modules:writeToMemory failed:
[Code=1]
[Service=Modules]
[Format=ispProgramMem: Error status received: Got 0x80, expected 0x00]

von Michael D. (etzen_michi)


Lesenswert?

Welchen Programmer verwendest du (das Board)?

von Thomas (kosmos)


Lesenswert?

als erstes auf die erste Registerkarte "Main" überprüfen das die 
eingestellte Programmiergeschwindigkeit kleiner als 1/4 ist also max. 
1/8 der Taktgeschwindigkeit des µC ist. Wenn es hier schon falsch ist 
wird das Signaturauslesen auch nicht klappen. Außerdem kann es passieren 
wenn man den µC Takt langsamer einstellt plötzlich die Programmierung 
nicht mehr funktioniert weil man dann den Programmiertakt auch mit 
runter setzen muss, deswegen ruhig auf 125kbit gehen dann sind alle 
internen Takte bis hinunter zu 1 MHZ abgedeckt.

Dann wählst du also deinen µC aus, auf Read Signatur klicken jetzt 
sollte ein OK kommen das die Signatur passt, wenn ja auf die 2te 
Registerkarte "Programm" wechseln bei Input Hexfile die hex-Datei 
auswählen und Programmieren.

Mehr braucht man erstmal nicht.

Oder man setzt den Punkt auf Use Current Simulator Flash Memory dann 
kann man direkt aus der Studiooberfläche auf den Chip mit dem Pfeil 
klicken und die Programmierung startet

Dann gibts noch die Möglichkeit mit dem Auto Symbol, hierzu kann man in 
der Registerkarte Auto einstellen was alles gemacht werden soll.
Einfacher ist es wenn man das Programm kompiliert und dann einfach auf 
Auto klickt dann wird das ausgeführt was man in der Registerkarte Auto 
einstellt z.B. µC löschen, Signatur prüfen, Programm flashen und 
vergleichen.

von spess53 (Gast)


Lesenswert?

Hi

>als erstes auf die erste Registerkarte "Main" überprüfen...

Ist das im AVR-Studio 5 auch so?

MfG Spess

von Thomas (kosmos)


Lesenswert?

sorry 5er Studio habe ich noch nicht probiert.

MaWin: Hatte mal einen Link zu AVRFreaks gepostet, da wurde die 
nachträgliche Treiberinstallation erklärt. Kann es sein das du ein 64Bit 
Betriebssystem hast?

von mc t. (mct3)


Lesenswert?

Ich hab einfach mal den ATMega16 auf den anderen roten Sockel gesteckt.
Alles klappt.

Hab aber schon das nächste Problem mit der Entprellen Funktion:

#include <avr/io.h>
#include <inttypes.h>
#ifndef F_CPU
# define F_CPU 11059000UL
#endif
#include <util/delay.h>     /* bei alter avr-libc: #include 
<avr/delay.h> */

/* Einfache Funktion zum Entprellen eines Tasters */
uint8_t debounce(volatile uint8_t *port, uint8_t pin)
{
    if ( !(*port & (1 << pin)) )
    {
        /* Pin wurde auf Masse gezogen, 100ms warten   */
        _delay_ms(50);   // Maximalwert des Parameters an _delay_ms
        _delay_ms(50);   // beachten, vgl. Dokumentation der avr-libc
        if ( *port & (1 << pin) )
        {
            /* Anwender Zeit zum Loslassen des Tasters geben */
            _delay_ms(50);
            _delay_ms(50);
            return 1;
        }
    }
    return 0;
}

int main(void)
{
    DDRB &= ~( 1 << PB0 );        /* PIN PB0 auf Eingang Taster)  */
    PORTB |= ( 1 << PB0 );        /* Pullup-Widerstand aktivieren */

    while(1)
  {

  if (debounce(&PINB, PB0))
    {
        /* Falls Taster an PIN PB0 gedrueckt     */
        /* LED an Port PD7 an- bzw. ausschalten: */
        PORTD = PORTD ^ ( 1 << PD7 );
    }
  }
}

Kompilieren fehlerfrei. Flashen fehlerfrei.
Wenn ich die Flachbandkabel am Board anschließe (an Taster und LEDs) und 
den Taster drücke passiert absolut garnichts.

Was kann diesmal falsch sein?
Ich hab keine Ahnung mehr.

von Ralf (Gast)


Lesenswert?

mc t3 schrieb:
> Ich hab keine Ahnung mehr.

ja.

von Thomas (kosmos)


Lesenswert?

schaltet dein Taster nach Masse(richtig angeklemmt)?

von mc t. (mct3)


Lesenswert?

ich denke schon, denn ich nutze die Taster auf dem STK500.

von Thomas (kosmos)


Lesenswert?

ja aber auch die müssen doch verkabelt werden.

vom Pin zum Taster dort müssen 5V anliegen, wenn die Taste gedrückt wird 
fällt die Spannung auf 0 ab, teste das mal mit dem Multimeter.

von mc t. (mct3)


Lesenswert?

Hab durchgemessen und funktioniert, (bis auf das bei Taster gedrückt 
noch 0,... mV anliegen), was glaube ich nicht schlimm ist.

von mc t. (mct3)


Lesenswert?

Hat sonst noch jemand eine Idee warum der Cotroller nicht will?

von Thomas (kosmos)


Lesenswert?

das passt, bin nicht so der C Experte aber hast du PortD mittels DDRD 
als Ausgang definiert.

von mc t. (mct3)


Lesenswert?

OHA! Sieht tatsächlich so aus, als hätte ich das vergessen...

Eigentlich habe ich den Code (bis auf ein paar Änderungen) 1:1 vom 
Tutorial übernommen. Ich habe nicht darauf geachtet. Vielen Dank vor 
Deine Hilfe Thomas, und an alle anderen natürlich auch.

FG

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.