Forum: Mikrocontroller und Digitale Elektronik stk500 testprogramm


von sumsemann (Gast)


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

von Patrick (Gast)


Lesenswert?

Programmier doch einfach mal ein Lauflicht. Den Code dazu findest Du 
überall.

von sumsemann (Gast)


Lesenswert?

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

von Patrick (Gast)


Lesenswert?

nimm doch den:
1
#include <inttypes.h>                                               // Allgemeine Bibliotheken
2
#include <avr/io.h>
3
#include <avr/interrupt.h>
4
5
#define sbi(ADDRESS,BIT) ((ADDRESS) |= (1<<(BIT)))
6
#define cbi(ADDRESS,BIT) ((ADDRESS) &amp;= ~(1<<(BIT)))
7
8
void warte(uint16_t t) {                                            // Funktion "Warteschleife"
9
        uint16_t i, j;
10
11
        for (i=0;i<t;i++) {                                         // Verschachtelte Schleife mit Befehl NOP="Tue nichts", damit
12
                for (j=1;j<200;j++) {                               // die Schleife nicht wegoptimiert wird.
13
                        asm volatile ("nop");
14
                }
15
        }
16
}
17
18
int main (void) {
19
        uint8_t lauflicht;
20
21
        DDRB=0xFF;                                                  // Port B auf Ausgang
22
        PORTB=0xFF;                                                 // Alle Ausgänge auf 1
23
24
        DDRD=0xFF;                                                  // Port D auf Ausgang
25
        PORTD=0xFF;                                                 // Alle Ausgänge auf 1
26
27
        lauflicht=1;
28
        for (;;) {                                                  // Endlosschleife
29
                PORTB=~lauflicht;                                   // Untere 8 Bit auf PORT B ausgegeben
30
                lauflicht=lauflicht<<1;                             // Lauflicht um 1 Bit nach links weiterschieben
31
                if (lauflicht==0)                                   // Wenn Lauflicht durchgelaufen ist, dann wieder am Anfang beginnen
32
                lauflicht=1;
33
                warte(3000);                                        // Warten
34
        }
35
}

Der Code ist für einen Atmega 16.

von Patrick (Gast)


Lesenswert?

Oder ein "KnightRider"-Lauflicht:
1
#include <avr/io.h>
2
#include <avr/delay.h>
3
#include <util/delay.h>
4
#include <inttypes.h>
5
6
#ifndef F_CPU
7
#define F_CPU 11059200UL
8
#endif
9
10
unsigned char i;                //Laufvariable für Warteschleife
11
unsigned char run;                //Startvariable für Lauflicht
12
unsigned char bit;                //Aufwärtslaufendes bit
13
unsigned char bit2;                //Voraussetzung für Abwärtsschleife
14
unsigned char bit3;                //Abwärtslaufendes bit
15
unsigned char speed;
16
17
18
void wait(uint8_t speed){               //Warteschleife, beeinflusst Lauflichtgeschwindigkeit
19
    for (i=1; i<=speed; i++)         
20
              _delay_ms(10);}
21
22
int main (void){
23
  
24
  DDRB = 0xFF;                //Port B als Ausgang
25
  PORTB = 0xFF;                //alle LED's aus
26
  DDRD = 0x00;                //Port D als Eingang
27
28
  bit2 = 0;                  //bit2 vordefinieren
29
  bit3 = 128;                  //bit3 vordefinieren
30
  while(1){
31
  
32
  switch(PIND){                //Startbefehl abfragen
33
34
    case 0xFE: run=1; speed=64; break;      //SW0: Start, Warteschleife wird 64 mal durchlaufen
35
    case 0xFD: run=1; speed=32; break;      //SW1: Start, Warteschleife wird 32 mal durchlaufen
36
    case 0xFB: run=1; speed=16; break;      //SW2: Start, Warteschleife wird 16 mal durchlaufen
37
    case 0xF7: run=1; speed=8; break;      //SW3: Start, Warteschleife wird 8 mal durchlaufen
38
    case 0xEF: run=1; speed=4; break;       //SW4: Start, Warteschleife wird 4 mal durchlaufen
39
    case 0xDF: run=1; speed=2; break;       //SW5: Start, Warteschleife wird 2 mal durchlaufen
40
    case 0xBF: run=1; speed=1; break;       //SW6: Start, Warteschleife wird 1 mal durchlaufen
41
    case 0x7F: run=0; break;          //SW7: Stopp
42
    default: break;                //Wenn keine Taste gedrückt: Schleife ohne Veränderung verlassen
43
    }
44
45
46
47
  if(run){                  //Lauflicht einschalten bei run=1
48
  
49
    if(bit2==0){
50
    PORTB =~bit;              //bit komplementär auf PORTB ausgeben
51
    bit = bit<<1;}              //aufwärts
52
    if (bit==0){              //ganz oben:  
53
      bit2=1;                //Bedingung für Abwärtsschleife
54
      bit=1;}                //bit wieder auf Anfangswert
55
    else wait(speed);            //Warteschleife aufwärts
56
    if (bit2==1){              //Abwärtsschleife
57
      PORTB =~bit3;            //bit3 komplementär auf PORTB ausgeben
58
      bit3 = bit3>>1;}          //abwärts
59
    if (bit3==0){              //ganz unten:
60
        bit2=0;              //Schleife verlassen
61
        bit3=128;}            //bit3 wieder auf Anfangswert
62
    else wait(speed);            //Warteschleife abwärts
63
    
64
    }  
65
      
66
    
67
  else {                    //bei run=0:
68
    PORTB=0xFF;                //alle LED's aus
69
    bit=1;
70
    bit3=128;
71
    bit2=0;}}                //bits auf Anfangswert, damit immer bei LED0 begonnen wird
72
73
return 0;                       //never reached
74
}

von sumsemann (Gast)


Lesenswert?

Vielen Dank.

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

Gruß Markus

von Holger K. (krulli) Benutzerseite


Lesenswert?

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

von sumsemann (Gast)


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.

von Patrick (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


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.

von sumsemann (Gast)


Lesenswert?

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

von STK500-Besitzer (Gast)


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...

von Holger K. (krulli) Benutzerseite


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

von sumsemann (Gast)


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

von loll (Gast)


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***************/

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.