mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Läuft - läuft nicht


Autor: Wolfgang (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mein Atmega ist gegen mich :(. Auf meiner Entwicklungsplatine (myAVR 
Board MK2 USB PLUS) problemlos. Jetzt habe ich den Controller auf eine 
Platine mit meiner Schaltung gelötet, und die Ausgänge stehen... Das 
Programm scheint nicht zu laufen. Versorgungsspannung und Verdrahtung 
sollten OK sein.

Kann es was mit dem externen Takt von der Entwicklungsplatine zu tun 
haben???

Autor: Sebastian Weidmann (code)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kannst du das Programm ohne Fehler in den Controller flashen?
Woran merkst du, dass dein Programm nicht läuft?

Poste doch mal deinen Schaltplan +Layout

mfg
code

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann es sein, dass auf der Entwicklungsplatine eine andere Sort 
Taktgenerator verwendet wird, als auf deiner Zielplatine, und du die 
Fuses nicht enrsprechend umgestellt hast?

Autor: Wolfgang (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, beim Flashen treten keine Fehler auf. Auf der Entwicklungsplatine 
ist ein externer Takt angeschlossen. Jedoch, ist dieser, meines Wissens 
nicht verwendet, da der Atmega im Auslieferungszustand den internen 
verwenden!?

Ich denke das der Controller steht, weil sich an den Ausgängen nach dem 
Einschalten nichts mehr tut. Es treten auch komische Spannungen im 
Bereich von 0,7-1,2 V auf wo normalerweise High-Pegel (4,2V) anliegen 
müssten. Die Ausgänge des Atmega schalten einfach nur LEDs mit 
Emiterschaltung eines BC135. Schaltungstechnisch ist das nicht sehr 
komplex, jedoch kann ich mir die Spannungen an den Ausgängen nicht 
erklären. Wenn ich die Spannungen der Ausgänge auf der 
Entwicklungsplatine messe, kommen sinnvolle Werte im Bereich von 3-4V 
heraus.

Autor: Marcus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
DDR Register auf Ausgang gestellt?
Sonst machst du nur die Pullups ein und aus :)

Autor: Wolfgang (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Die DDR Register sind alle gesetzt. Vielleicht kann jemand was mit dem 
Quellcode anfangen und den Fehler finden.

Autor: Wolfgang (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich vermute es liegt an dem Takt oder ähnlichem. Es leuchtet am Ausgang 
lediglich eine LED. Sonst tut sich nichts. Ich habe hier mal kurz meinen 
Schaltungsaufbau skizziert. Hinzu kommt natürlich Spannungsversorgung 
zwischen PIN 7 und PIN 8.

Einen externen Quarz habe ich nicht angeschlossen.

Autor: Michael S. (msk) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist Pin 4 der Reset-Pin? Da muss ein Pullup-Widerstand (z.B. 10k) gegen 
Vcc ran. Warum sind so viele uC-Ausgänge auf eine Basis eines 
Transistors geschaltet??

Edit: Ich sehe gerade, dass beim ATMega8 der Reset an Pin 1 liegt, 
welcher bei Dir einfach an der Basis eines Transistors parallel zu 
anderen Ausgängen klemmt. Ganz spontan kann ich mir nicht vorstellen, 
wie das funktionieren soll...

Autor: Stefan Wimmer (wswbln)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab' nur mal ganz kurz drübergeschaut, aber
- wenn Variablen sowohl in einer Interruptroutine als auch im Programm 
verwendet (und verändert) werden (Program, Counter), müssen die volatile 
deklariert werden.
- Wenn 16-Bit Werte auch in Interruproutinen ausgewertet oder verändert 
werden, müssen beim Ändern im Programm während der Änderung/Abfrage die 
Interrupts gesperrt werden (Stichwort: atomic / non atomic instruction)
Deine "if (Counter == 0)"-Abfrage kann daher schiefgehen (zumal Counter 
nicht volatile ist)
- Delays in Interruptroutinen? NO-NO!
- schau' Dir mal das 'CASE' C-Konstrukt an

Happy Coding!

Autor: Wolfgang (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
bezüglich der Schaltung:

Ich nutzte vier Ausgangspins je Farbe mit verschiedenen Widerständen. 
Alle 4 Ausgänge High, sind die 4 Widerstände parallel und ich habe den 
kleinsten Basiswiderstand --> größten Kollektorstrom. Die Diode habe ich 
um den LOW Pegel von 0,7V etwas abzufangen und die den Einfluss eines 
Ausgangs auf den anderen Ausgang zu verhindern.

Autor: Michael S. (msk) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wolfgang schrieb:
> bezüglich der Schaltung:
>
> Ich nutzte vier Ausgangspins je Farbe mit verschiedenen Widerständen.
> Alle 4 Ausgänge High, sind die 4 Widerstände parallel und ich habe den
> kleinsten Basiswiderstand --> größten Kollektorstrom. Die Diode habe ich
> um den LOW Pegel von 0,7V etwas abzufangen und die den Einfluss eines
> Ausgangs auf den anderen Ausgang zu verhindern.

Und was ist mit dem Reset-Pin? Wie resettest Du den uC beim Start bzw. 
manuell?

Autor: Michael S. (msk) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stefan Wimmer schrieb:
> - Delays in Interruptroutinen? NO-NO!

Das sehe ich auch gerade. Also das würde ich da auf alle Fälle 
herausnehmen und nur ein Flag setzen, das dann im Hauptprogramm 
abgefragt wird.

Autor: Wolfgang (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Morgen,

gestern habend habe ich noch ein bisschen rumprobiert an der 
Spannungsversorgung und und und. Als ich die Masse des BC135, welcher 
die Blaue LED ansteuert entfernt habe, schnellt der Strom auf einmal 
hoch und die Grüne und Rote LED leuchteten.
Blau ist an den PINS (26...28, und PIN 1). Also vermute ich, das es doch 
etwas mit dem Reset PIN zu tun hat. Ich werde heute die Platine umlöten 
und das untere Nibble dieses Ports zur Ansteuerung nehmen. Ich hoffe, 
dann funktioniert die Schaltung.

Autor: Winfried (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Konzept deiner Schaltung ist sehr exotisch und wenig geeignet. 
Erstmal kannst du dir die Dioden sparen, weil der AVR bei Low nahe 0V 
und nicht 0.7V am Port hat. Über den Basisstrom den Kollektorstrom in 
dieser Art steuern zu wollen, ist äußerst problematisch. Erstmal streuen 
die Transistoren, was die Verstärkung angeht, du müsstest alle 
Widerstände anpassen. Und wenn du mal einen Transistor tauschst, musst 
du wieder neue Widerstände einlöten. Zudem schwankt die Verstärkung z.B. 
bei Temperaturschwankungen.

Typisch löst man sowas über PWM, wobei du dann nur 1 Portpin pro Farbe 
brauchst.

Autor: Wolfgang (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich möchte nur verschiedene Helligkeitsstufen der LED mit den 
Basiswiderständen erreichen. Die Dimensionierung passt da ganz gut und 
reicht auch dafür aus. Alle LEDs hängen an Step-Down Convertern, sodass 
ich  bei Inbetriebnahme den Maximalstrom über ein Poti einstellen kann. 
Ist nicht ganz durchdacht aber für das erste größere Projekt reicht das.

Die Low-Pegel nahm ich aus dem Datenblatt an. Daher kam ich auf die 
0,7V. Das steht doch nicht umsonst!?

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.