Mikrocontroller spinnt?

Gast #1915641
Lesenswert?

Hallo!

Habe ein sehr seltsames Problem mit meinem ATmega16.

Habe ihn soeben mit einem total einfachen Programm programmiert:
1
#include <avr/io.h>
2
#include <utils/delay.h>
3

4
void main (void)
5
{
6
   DDRC = 0xFF;   //PortC als Ausgang schalten
7

8
   PORTC = 0xFF;
9
   _delay_ms(5000);
10
   PORTC = 0;
11

12
}

Was das Prog machen soll ist klar: Zunächst setzt es PortC als Ausgang. 
Danach soll PORTC auf HIGH gehen, 5 sekunden warten und anschließend 
soll PortC auf LOW gehen.

Da ich an den Ports die Basis der Transistoren (mit Basiswiderstand 
versteht sich) angeschlossen habe, an dessen Collectoren Relais 
(Steuerkreis) hängen, klackern sie seitdem völlig sporadisch hin und 
her. Weder ein 5 sekündiges Warten noch irgendein nachvollziehbares 
Ereignis tritt auf.

Habe nun die Spannungen direkt an den Pins des Port C vom Controller 
gegen Masse gemessen.
Direkt da treten die Probleme auf: Spannung schwankt eben wie sie gerade 
will.

An der Spannungsversorgung des Controllers kann es nicht liegen, da ich 
zusätzlich LEDs (die an Port D hängen) angeschlossen habe, die konstant 
"durchleuchten". Wäre es also die Spannungsversorgung, würden die ja im 
gleichen Takt wie die Relais flackern/klacken.

Kann es an der "delay_ms"-Funktion liegen? Habe nämlich einen 14,... 
MHz-Quarz an den Controller angeschlossen, da ich auch über den UART 
kommunizieren möchte. Aber jetzt erstmal möchte ich die Relais anständig 
zum Laufen kriegen :-(

Die Fuses habe ich für den Quarz übrigens auch auf "ext. Crystal" 
gesetzt.

Vielen Dank
Gast #1916104
Lesenswert?

@karlheinz:

Daran wird es wohl liegen, bin gerade in der Arbeit, werde es dann 
daheim testen.

Der PortC hat einfach herumgesponnen. Spannungen HIGH/Low-Pegel wie er 
gerade lustig war geschaltet.


Gruß
Gast #1917479
Lesenswert?

Hallo Leute,

habe es gerade getestet, habe das "JTAG disabled" (in den Fuses), 
allerdings hat es nicht zum gewünschten Effekt geführt :-(

Relais klackern immer noch wie sie gerade lustig sind.


Hier das Programm
1
#include <avr/io.h>
2
#include <util/delay.h>
3

4

5
void main (void)
6
{
7
  DDRC = 0xFF;      // Relais als Ausgänge schalten
8
  DDRD = 0xFF;
9
  PORTD |= 0xC0;
10

11
  PORTC = 0;
12
  
13

14
  while(1)
15
  {
16
    PORTC =0xFF;
17
    _delay_ms(1000);
18
    PORTC = 0;
19
    _delay_ms(1000);
20
  }
21
}
Gast #1917482
Lesenswert?

soo...Jetzt kann ich den AVR (atmega16) nicht mal mehr programmieren :-(

Gerade noch geflasht, Compileroptimierung geändert, nochmal geflasht, 
dann die Meldung:

ISP Mode Error.....1/4 of the clock frequency.....


Hach macht das schon wieder Laune.


Könnt ihr mir weiterhelfen?
#1917484
Lesenswert?

Hallo Stefan,

ganz einfache und generell.

Wenn der Microcontroller (ob nun AVR oder PIC oder sonst was) mit seinem 
Programm fertig ist, dann macht er einen RESET

Darum folgender Aufbau wenn man wie du nur einmal die LED ausschalten 
möchte:


main(){
//dein Code = LED ausschalten
while(1){}
}

damit hängt der AVR in einer Endlosschleife und es wird kein Reset 
ausgelöst. => LED bleibt dauerhaft aus
Gast #1917488
Lesenswert?

Also...jetzt folgendes Resultat:


Habe soeben (nachdem ich ihn nicht flashen konnte) nochmal oben auf das 
"AVR"-Symbol geklickt. Anschließend auf den Reiter "Fuses".

DAnn war da komischerweise wieder der Haken bei "JTAG enabled" drin, 
obwohl ich ihn vorhin rausgemacht habe. Nun habe ich ihn erneut 
rausgemacht, siehe da, er führt den (bevor ich nicht mehr flashen 
konnte) Code korrekt aus.

Relais klacken genau im Sekundentakt.

ABER: ich kann ihn mit oben genannter Meldung nicht mehr flashen.


Woran liegt das?

" Programming Flash .... FAILED!"


Danke!
Gast #1917505
Lesenswert?

Stefan schrieb:
> while(1)
>   {
>     PORTC =0xFF;
>     _delay_ms(1000);
>     PORTC = 0;
>     _delay_ms(1000);
>   }

Hallo eine while schleife wiederholt solange bis die Bedingung falsch 
wird, 1 wird nie falsch =>


portc ein
warten
portc aus
warten
portc ein
.
.
.

<= klackern im sekunden takt

fz
Gast #1917510
Lesenswert?

Hi

>Stromversorgung abgezogen. Wieder angesteckt, Mikrocontroller macht
>garnix mehr LoL

>Die Relais klackern nur, solange der AVRISPmkII am ISP Connector steckt.

Wie sieht denn deine Hardware, besonders RESET-Beschaltung, aus?

MfG Spess
Gast #1917517
Lesenswert?

> Die Relais klackern nur, solange der AVRISPmkII am ISP Connector steckt.

Das kann an der Reset Leitung liegen. Hast du einen R von ~10k von der 
Reset Leitung nach Vcc????? Wenn nicht, dann mal schleunigst dranmachen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren