mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Mikrocontroller spinnt?


Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Habe ein sehr seltsames Problem mit meinem ATmega16.

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

void main (void)
{
   DDRC = 0xFF;   //PortC als Ausgang schalten

   PORTC = 0xFF;
   _delay_ms(5000);
   PORTC = 0;

}


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

Autor: Michael Buesch (mb_)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
watchdog?

Autor: Bastler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Programm läuft ins Nirvana bzw. startet neu!

Und warum?

Ja weil...

...weil...

while(1)
{

}

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hö?

Ich habe doch garkeine while-Schleife. Oder meintest du, dass das der 
Grund ist?

Er soll halt einfach den letzten Status (Port auf LOW setzen) bis ins 
Unendliche halten...


Danke!

Autor: Kasperle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
#include <avr/io.h>
#include <utils/delay.h>

void main (void)
{
  DDRC = 0xFF;   //PortC als Ausgang schalten

  while( 1)
  {
    PORTC = 0xFF;
    _delay_ms(5000);
    PORTC = 0;
    _delay_ms(5000);
  }
}

Autor: Kasperle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jetzt blinkt es

Autor: Kasperle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
oder so


#include <avr/io.h>
#include <utils/delay.h>

void main (void)
{
  DDRC = 0xFF;   //PortC als Ausgang schalten

  PORTC = 0xFF;
  _delay_ms(5000);
  PORTC = 0;

  while( 1)
  {
    ;
  }

}

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

Bewertung
0 lesenswert
nicht lesenswert
Mega16 und Probleme am Port C?

Du hast das JTAG Interface nicht abgeschaltet.

Autor: Iwo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
JTAG kann man mit den Fuses abschalten. Dann tut der C-Port auch...

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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ß

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

#include <avr/io.h>
#include <util/delay.h>


void main (void)
{
  DDRC = 0xFF;      // Relais als Ausgänge schalten
  DDRD = 0xFF;
  PORTD |= 0xC0;

  PORTC = 0;
  

  while(1)
  {
    PORTC =0xFF;
    _delay_ms(1000);
    PORTC = 0;
    _delay_ms(1000);
  }
}  


Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Lehrmann Michael (ubimbo)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Super.

Stromversorgung abgezogen. Wieder angesteckt, Mikrocontroller macht 
garnix mehr LoL

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Relais klackern nur, solange der AVRISPmkII am ISP Connector steckt.

Autor: fz (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Alex R. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja habe einen 10k Widerstand am RESET gegen Vcc

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.