Forum: Mikrocontroller und Digitale Elektronik Code auf Mega32 läuft nicht? Minimalcode


von Timo P. (latissimo)


Lesenswert?

Hallo! Ich verzweifle noch.

Problembeschreibung: Entwicklungsboard mit Atmega32 ist programmiert, 
positive Rückmeldung vom MK2 Progger. Fuse-Bits stehen noch auf default 
1MHz intern, ansonsten nur SPIEN an.(klar) Die Pins gehen nicht auf 
High! VCC liegt am Controller an. Die Quelle kann auch mehr als genug 
Strom treiben. Oszi zeigt auch weder am Resetpin, noch an VCC am µC 
mucken.

habe im Code dann extra zum Test "nur" versucht, einen pin auf High zu 
schalten. Geht nicht!

Hier der Code:
1
#define F_CPU 1000000
2
#include  <avr/io.h>
3
#include <util/delay.h>
4
#include <stdio.h>
5
6
#define IO_DDR      DDRC
7
#define IO_PORT     PORTC
8
#define SELF_HOLD    4
9
#define LED      5
10
11
int main()
12
13
{
14
  //test
15
  DDRA |= (1<<0);
16
  PORTA |= (1<<0);
17
  for(;;);
18
  //ende test
19
20
21
  PORTC |= (1<<SELF_HOLD); 
22
  DDRC  |= (1<<SELF_HOLD) | (1<<LED);  // configuring pins as output
23
24
  for(int i = 0; i<10; i++)
25
  {
26
    PORTC ^= (1<<LED); 
27
    _delay_ms(200);
28
    _delay_ms(200);
29
    _delay_ms(100);
30
31
  }
32
  PORTC |= (1<<LED);
33
  PORTC &= ~(1<<SELF_HOLD); // selbsthaltung lösen µC stromlos!!  
34
  return;
35
}
Dieser Code soll erst mal auf dem Entwicklungsboard laufen, um zu 
schauen, ob die Pins überhaupt den gewünschten Status annehmen. Das 
Eval-Board stellt VCC selbstverst. dauerhaft bereit!


Um mal eine Frage zu formulieren:
Vllt. könnt ihr mir helfen, warum zum henker ich nicht mehr in der Lage 
bin, einen digit. Pin auf high zu schalten. Ich steh voll auf dem 
Schlauch.
Danke für Antwort

von J.-u. G. (juwe)


Lesenswert?

Timo P. schrieb:
> for(;;);
>   //ende test

Nein, Dein Test wird nie zu Ende sein.

PA0 sollte aber high sein.

von Timo P. (latissimo)


Lesenswert?

Der Test-Code-snippet ist hier zu ende. Der code soll ja weiterlaufen. 
Hier macht er halt in einer leeren schleife nix.

Warum der Pin (auch auf verschiedenen sonst immer funktionierenden) 
Testboards nicht läuft, weiß ich nicht.

Kompiliert habe ich mit dem WINAVR via AVR-Studio. Für den 
Compiler/linker ist selbstverst. der richtige Controller eingestellt.

von spess53 (Gast)


Lesenswert?

Hi

JTAG abgeschaltet?

MfG Spess

von Timo P. (latissimo)


Lesenswert?

jap JTAG aus, SPI an. BODEN steht auf 2V7

von MWS (Gast)


Lesenswert?

Wie sieht's den mit der BOOTRST Fuse aus ?

von Lasse S. (cowz) Benutzerseite


Lesenswert?

Eventuell Optimierung so eingestellt, dass die leere Schleife 
wegoptimiert wird?

von Rene K. (draconix)


Lesenswert?

Lasse S. schrieb:
> Eventuell Optimierung so eingestellt, dass die leere Schleife
> wegoptimiert wird?

Da müsste dennoch wenigstens PINA0 auf high sein.

von Tom (Gast)


Lesenswert?

An welchen Pin misst Du denn?
Im #define steht PORTC und vor Deiner TestEndlosschleife PORTA.
Es müsste also PA0 gesetzt sein.

von Stefan E. (sternst)


Lesenswert?

Lasse S. schrieb:
> Eventuell Optimierung so eingestellt, dass die leere Schleife
> wegoptimiert wird?

Eine leere Endlosschleife wird NIE wegoptimiert, egal mit welcher 
Einstellung.

von Werner B. (werner-b)


Lesenswert?

AVCC (und alle GND) angeschlossen?

RESET = HIGH?

von MWS (Gast)


Lesenswert?

Kann bestätigen, daß der Code genau das tut was er soll.
Das Ergebnis:
1
SBI       0x1A,0
2
SBI       0x1B,0
3
RJMP      PC-0x0000

Mittlerweile BOOTRST nachgesehen ? Nicht daß der Bootloaderbereich ohne 
vorhandenen Bootloader angesprungen wird.

von Timo P. (latissimo)


Lesenswert?

ja, VCC und RST sehen am oszi super aus. dauernd high. Fuses können es 
auch nicht sein, hatte schon jungfräuliche Controller ausprobiert. 
Messen tu ich an den richtigen Pins. Zum einfachen Test hatte ich 
versucht, PA0 auf HIGH zu schalten, also messe ich auch an diesem pin.

BOOTRST war ich nicht dran. Neuer µC hilft ja auch nicht. :(

von MWS (Gast)


Angehängte Dateien:

Lesenswert?

Timo P. schrieb:
> BOOTRST war ich nicht dran. Neuer µC hilft ja auch nicht. :(

Versuch doch mal das von mir erzeugte Hex.

von Timo P. (latissimo)


Lesenswert?

Diese Hex-file läuft!

WARUM? Ich gucke noch mal meine Project-Options durch, bzw. um hier die 
Fehlerquelle fest zu machen, werde ich direkt ein neues Projekt anlegen 
mit default-einstellungen. Hoffe das der Fehler da liegt.

von MWS (Gast)


Lesenswert?

Timo P. schrieb:
> Diese Hex-file läuft!
>
> WARUM?

Häng' Dein Hexfile an, dann sag' ich's Dir.

von Timo P. (latissimo)


Angehängte Dateien:

Lesenswert?

hier die geforderte hex-file

von Stefan E. (sternst)


Lesenswert?

Timo P. schrieb:
> hier die geforderte hex-file

Die ist definitiv nicht aus obigen Code entstanden.

Dass du die zu programmierende HEX-Datei neu auswählen musst, wenn du zu 
einem anderen AVR-Studio-Projekt wechselst, weißt du?

von MWS (Gast)


Lesenswert?

Timo P. schrieb:
> hier die geforderte hex-file

Dieses Hex enthält folgenden Code:
1
PORTA |= (1<<0);
2
  DDRA |= (1<<0) | (1<<1);
3
    _delay_ms(2000);
4
PORTA &= ~(1<<0)
5
  for(;;);

Kommt Dir das bekannt vor ?
Wenn der µC auch wie definiert mit 1MHz läuft, so hätte das immerhin für 
einen 2 Sekunden High-Level an PA0 gesorgt. Falls Du natürlich dachtest, 
der muss immer High bleiben, mag's sein, daß Du diese 2 Sekunden 
versäumt hast.

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.