www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik stk500 testprogramm


Autor: sumsemann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe ein stk 500, allerdings suche ich noch das Testprogramm ob mein 
Bord auch funktioniert.
Wäre schön wenn mir es jemand schicken könnte oder schreiben wo ich es 
finde.

Schon mal vielen Dank

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Programmier doch einfach mal ein Lauflicht. Den Code dazu findest Du 
überall.

Autor: sumsemann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn Du mir bitte einen link dazu geben könntest wäre ich sehr dankbar.
Finde einfach nicht das richtige.

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nimm doch den:
#include <inttypes.h>                                               // Allgemeine Bibliotheken
#include <avr/io.h>
#include <avr/interrupt.h>

#define sbi(ADDRESS,BIT) ((ADDRESS) |= (1<<(BIT)))
#define cbi(ADDRESS,BIT) ((ADDRESS) &amp;= ~(1<<(BIT)))

void warte(uint16_t t) {                                            // Funktion "Warteschleife"
        uint16_t i, j;

        for (i=0;i<t;i++) {                                         // Verschachtelte Schleife mit Befehl NOP="Tue nichts", damit
                for (j=1;j<200;j++) {                               // die Schleife nicht wegoptimiert wird.
                        asm volatile ("nop");
                }
        }
}

int main (void) {
        uint8_t lauflicht;

        DDRB=0xFF;                                                  // Port B auf Ausgang
        PORTB=0xFF;                                                 // Alle Ausgänge auf 1

        DDRD=0xFF;                                                  // Port D auf Ausgang
        PORTD=0xFF;                                                 // Alle Ausgänge auf 1

        lauflicht=1;
        for (;;) {                                                  // Endlosschleife
                PORTB=~lauflicht;                                   // Untere 8 Bit auf PORT B ausgegeben
                lauflicht=lauflicht<<1;                             // Lauflicht um 1 Bit nach links weiterschieben
                if (lauflicht==0)                                   // Wenn Lauflicht durchgelaufen ist, dann wieder am Anfang beginnen
                lauflicht=1;
                warte(3000);                                        // Warten
        }
}

Der Code ist für einen Atmega 16.

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oder ein "KnightRider"-Lauflicht:
#include <avr/io.h>
#include <avr/delay.h>
#include <util/delay.h>
#include <inttypes.h>

#ifndef F_CPU
#define F_CPU 11059200UL
#endif

unsigned char i;                //Laufvariable für Warteschleife
unsigned char run;                //Startvariable für Lauflicht
unsigned char bit;                //Aufwärtslaufendes bit
unsigned char bit2;                //Voraussetzung für Abwärtsschleife
unsigned char bit3;                //Abwärtslaufendes bit
unsigned char speed;


void wait(uint8_t speed){               //Warteschleife, beeinflusst Lauflichtgeschwindigkeit
    for (i=1; i<=speed; i++)         
              _delay_ms(10);}

int main (void){
  
  DDRB = 0xFF;                //Port B als Ausgang
  PORTB = 0xFF;                //alle LED's aus
  DDRD = 0x00;                //Port D als Eingang

  bit2 = 0;                  //bit2 vordefinieren
  bit3 = 128;                  //bit3 vordefinieren
  while(1){
  
  switch(PIND){                //Startbefehl abfragen

    case 0xFE: run=1; speed=64; break;      //SW0: Start, Warteschleife wird 64 mal durchlaufen
    case 0xFD: run=1; speed=32; break;      //SW1: Start, Warteschleife wird 32 mal durchlaufen
    case 0xFB: run=1; speed=16; break;      //SW2: Start, Warteschleife wird 16 mal durchlaufen
    case 0xF7: run=1; speed=8; break;      //SW3: Start, Warteschleife wird 8 mal durchlaufen
    case 0xEF: run=1; speed=4; break;       //SW4: Start, Warteschleife wird 4 mal durchlaufen
    case 0xDF: run=1; speed=2; break;       //SW5: Start, Warteschleife wird 2 mal durchlaufen
    case 0xBF: run=1; speed=1; break;       //SW6: Start, Warteschleife wird 1 mal durchlaufen
    case 0x7F: run=0; break;          //SW7: Stopp
    default: break;                //Wenn keine Taste gedrückt: Schleife ohne Veränderung verlassen
    }



  if(run){                  //Lauflicht einschalten bei run=1
  
    if(bit2==0){
    PORTB =~bit;              //bit komplementär auf PORTB ausgeben
    bit = bit<<1;}              //aufwärts
    if (bit==0){              //ganz oben:  
      bit2=1;                //Bedingung für Abwärtsschleife
      bit=1;}                //bit wieder auf Anfangswert
    else wait(speed);            //Warteschleife aufwärts
    if (bit2==1){              //Abwärtsschleife
      PORTB =~bit3;            //bit3 komplementär auf PORTB ausgeben
      bit3 = bit3>>1;}          //abwärts
    if (bit3==0){              //ganz unten:
        bit2=0;              //Schleife verlassen
        bit3=128;}            //bit3 wieder auf Anfangswert
    else wait(speed);            //Warteschleife abwärts
    
    }  
      
    
  else {                    //bei run=0:
    PORTB=0xFF;                //alle LED's aus
    bit=1;
    bit3=128;
    bit2=0;}}                //bits auf Anfangswert, damit immer bei LED0 begonnen wird

return 0;                       //never reached
}


Autor: sumsemann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank.

Du hast mir sehr geholfen.
Jetzt muss es nur noch funktionieren.

Gruß Markus

Autor: Holger Krull (krulli) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das originale STK500 Demo Programm
Beitrag "Re: Kann man einen AVR auch "auslesen" ??"

Autor: sumsemann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank erst mal Patrik für deine Hilfe aber leider habe ich nach 
eintippen des programms wieder mal einen alten Fehler.
bei mir im avr-Studiom kann wieder einmal nicht die .elf Datei erzeugt 
werden.
Ich fange langsam an zu verzweifeln.
der fehler ist "gccplug in:error:Object file not found on expected 
location......stk500_testprogramm.elf"

Manchmal erzeugt mein avr diese elf und oft aber auch nicht.
Wäre super wenn Du mir weiter helfen könntest.

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Frage muss ich leider weiterreichen. Da kenn ich mich auch zu wenig 
aus. Bei mir hat immer alles funktioniert.
Sorry

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

Bewertung
0 lesenswert
nicht lesenswert
> der fehler ist "gccplug in:error:Object file not found on expected
> location......stk500_testprogramm.elf"

Wenn ich diese Fehlermeldung habe, dann habe ich normalerweise
einen C-Syntaxfehler. Scrolle doch mal im Ausgabefenster etwas
hoch und sieh nach, ob der Compiler einen Fehler gemeldet hat.

Autor: sumsemann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank,
soweit jetzt erstmal alles OK.
Hatte einen schreib fehler.
dafür habe ich jetzt den nächsten fehler

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In dem grünen Heft, das dem STK500 beiliegt, ist ein 
Assembler-Testprogramm abgedruckt. Als ich mein erstes STK500 bekommen 
habe (mit EEPROM), war der beiliegende AVR (AT90S...) mit dem Programm 
schon gefüllt und man konnte die LEDs mit Hilfe der Tasten in 
verschiedenen Mustern leuchten lassen.

>soweit jetzt erstmal alles OK.
>Hatte einen schreib fehler.
>dafür habe ich jetzt den nächsten fehler

C ist case-sensitiv...

Autor: Holger Krull (krulli) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
STK500-Besitzer wrote:
> In dem grünen Heft, das dem STK500 beiliegt, ist ein
> Assembler-Testprogramm abgedruckt. Als ich mein erstes STK500 bekommen
> habe (mit EEPROM), war der beiliegende AVR (AT90S...) mit dem Programm
> schon gefüllt und man konnte die LEDs mit Hilfe der Tasten in
> verschiedenen Mustern leuchten lassen.
 siehe Post von 9:58

Autor: sumsemann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Leider sind meine Unterlagen sehr unvollständig.
Aber mein Programm ist nun schon einmal kompiliert.

jetzt aber folgendes problem.

"A problem when executing the command. See the command output for more 
Info.
Tip: Check that the ISP programming frequency specified on the Board 
page is well below 1/4 of the clock frequency of the device. Extra 
precaution should be made when using the CKDIV fuse and/or clock 
Prescaler Register (CLKPR) on parts supporting this."

Dies bekomme ich als fehlermeldung.

Ich möchte mein Programm auf einen ATmega32 schreiben und habe auch 
einen externen Quarz von 16 MHz eingesteckt.

Wäre super wenn mir jemand helfen könnte

Autor: loll (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Diese Problem haben wir in der Firma auch immer haben noch keine Lösung 
gefunden. Kann dir aber ein eifach Porgramm geben das es vielleicht um 
geht. So wie bei uns.


/*********************************************************************** 
*****************
Projekt : Aufgabe 1
Version : 1.0
Dateiname : Licht.asm
Erstelldatum : 06.08.2007
Kommentar : Die LED's sollen schwächer und heller leuchten.

************************************************************************ 
*****************
Chip type : ATmeag16
Clock frequency : 4 Mhz
Memory model : small
Internal RAM size: 16 kBytes
External RAM size: --
Data Stack size : --

************************************************************************ 
*****************
Datum Vers. Kommentar
17.07.2007 1.0 Änderungsgrund

************************************************************************ 
****************/
.include "m16def.inc"

/***********Variablen / Konstanten************/
.EQU DOWN = $00
.EQU UP = $FF

.def temp = r16 ;Arbeitsregister
.def temp2 = r17 ;Arbeitsregister
.def save = r18 ;Verzögerungs Speicher
.def richtung = r19
.def led = r20

/****************Speicher-Adressen************/
.org $0000
rjmp Init
.org $002A ;Beginn Programmcode

/****************Initialisierung**************/
Init:
ldi temp, HIGH(RAMEND)
out SPH, temp
ldi temp, LOW(RAMEND)
out SPL, temp ;Stack initialisieren

ser temp
out DDRB, temp ;PORTB als Ausgang
out PORTB, temp
clr temp
out DDRD, temp ;PORTD als Eingang

ldi temp2, $0F
ldi save, $30
ldi richtung, DOWN

clr led

/****************Hauptptogramm***************/
Main:

/********************LED_AN******************/

clr  led
out PORTB, led ;LED leuchten lassen


mov temp, save ;Delay laden

Verzoegerung1:

dec temp
brne Verzoegerung1

/********************LED_AN******************/


/********************LED_AB******************/

ser temp
out PORTB, temp ;LED ablöschen

ldi temp, $FF


Verzoegerung2:

dec temp
brne Verzoegerung2

/********************LED_AB******************/


/**********Verzögerung verändern*************/
dec temp2 ;16 mal warten bis Verzögerung ändern

cpi temp2, $00 ;Verzögerung Zähler
breq RichtungS


rjmp Main

/******************Richtung******************/

RichtungS:

cpi richtung, UP
breq Z_UP

cpi richtung, DOWN
breq Z_DOWN ;Hinauf oder Hinunter verzögern

Weiter:

cpi save, $30
breq Richtung_D

cpi save, $01
breq Richtung_D ;Richtungs wechsel


ldi temp2, $0F

rjmp Main



/******************Richtung******************/

/******************Zähler UP*****************/

Z_UP:

push temp

ldi temp, $01
add save, temp ;Verzögerung1 +1


pop temp

rjmp Weiter


/******************Zähler UP*****************/


/*****************Zähler Down****************/

Z_DOWN:

dec save ;Verzögerung1 -1

rjmp Weiter

/*****************Zähler Down****************/


/***************Richtung Drehen**************/
Richtung_D:

com richtung ;Richtungs wechsel



ldi temp2, $0F



rjmp Main

/***************Richtung Drehen**************/


/****************Hauptptogramm***************/

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.