Forum: Mikrocontroller und Digitale Elektronik Merkwürdiges Aufstartverhalten Atmega328 (Arduino)


von Michi87 (Gast)


Lesenswert?

Guten Morgen,

ich habe eine Schaltung aufgebaut bei der 2 uC (Atmega328) miteinander 
über eine serielle Verbindung (RX,TX) miteinander kommunizieren.
Der eine uC liest dabei verschiedene Sensorwerte aus und sendet die 
Messwerte über die serielle Schnittstelle an einen zweiten uC.
Dieser Wertet die Messwerte aus und soll eigentlich je nach Ergebnis bis 
zu 4 LEDs je nach Messwert zum leuchten bringen.

Beide uC liegen an der gleichen Spannungsversorgung (MP1584EN auf 3.3V 
eingestellt). Sobald ich die Spannung anlege, kommt das Problem.
Mal werden die LEDs richtig zum leuchten gebracht und mal leuchten 
einfach alle auf maximaler Stärke bzw. gar keine LED leuchtet mehr und 
es passiert nichts.

An was könnte dies liegen?
- Eine schlechte Masseverbindung?
- Fehlende PullUp/Down Widerstände am uC die zu einem unsicheren 
Verhalten führen? (Ich habe nur VCC und GND verbunden)

Habt ihr vielleicht eine Idee?

Als Programmierumgebung verwende ich Arduino.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Michi87 schrieb:
> (Ich habe nur VCC und GND verbunden)
Du hast also einfach 2 Schaltungen parallel an die selbe Versorgung 
gehängt und sonst nichts verbunden? Und dann spinnen die herum? Aber 
jede Schaltung für sich allein an der selben Versorgung funktioniert 
einwandfrei?

Hast du da mal Bilder vom Aufbau?

von Michi87 (Gast)


Lesenswert?

Also die VCC und GND Pins der beiden uC hängen an den entsprechenden 
Ausgangpins der Spannungsversorgung (3.3V)

Ebenso sind natürlich die beiden uCs an RX TX miteinander verbunden.

von Michi87 (Gast)


Lesenswert?

Soll ich es mal mit einem 10k PullUp von Reset nach VCC versuchen?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Michi87 schrieb:
> Soll ich es mal mit einem 10k PullUp von Reset nach VCC versuchen?
Das ist "normalerweise" für Laboraufbauten nicht nötig. Hast du 
wenigstens die immer notwendigen Blockkondensatoren zwischen Vcc und 
GND? Welchen Takt verwendest du? Aber wie gesagt: zeig doch mal ein Foto 
von deinem Aufbau. Und am besten auch einen Schaltplan.

Und letztlich ist es natürlich ist es so, dass die LEDs von Software 
angesteuert werden, die machen die Faxen nicht von alleine. Erstaunlich 
oft ist dort drin der Fehler. Sagen wir mal in 90% der Probleme. Mit 
steigender Tendenz...

Also brauchen wir für eine sinnvolle Fehleranalyse das, was du vor dir 
hast:
1. den Schaltplan
2. Fotos vom Aufbau
3. das Programm

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Hast Du auch AVCC der ATMEGAs angeschlossen?

von Michi87 (Gast)


Lesenswert?

Fotos und Schaltplan werden am Sonntag folgen. Leider schaffe ich es 
vorhe r nicht nach Hause.
AVCC ist angeschlossen

von Dieter S. (Gast)


Lesenswert?

Mit welcher Frequenz betreibst du die Atmega?
Bei 3,3 Volt sind die lt. Datenblatt nur bis 8 MHz geeignet.

von Dietrich L. (dietrichl)


Lesenswert?

Mögliche Ursache ist auch das Protokoll und seine Umsetzung, mit der 
die Daten übertragen werden.
Der Partner muss ja irgendwie den Beginn eines Datensatzes erkennen und 
die folgenden Bytes richtig zuordnen.

Wenn da nichts gemacht wurde, dann kann es z.B. sein, dass nach 
Einschalten der Sender schon ein Zeichen gesendet hat, bevor der 
Empfänger bereit ist. Dann werden alle folgenden Daten verschoben 
interpretiert.

Also: wie sind die Daten "verpackt" und wie wertet der Empfänger das 
aus?

Gruß Dietrich

von Amateur (Gast)


Lesenswert?

Vielleicht redest Du zu schnell!
Wird kein Quatsch verwendet, um die Übertragungsrate konstant zu halten, 
so kann es bei grenzwertigen Geschwindigkeiten Probleme geben.
Im Handbuch werden die Abweichungen, bei angenommen konstanter Frequenz, 
beschrieben.

von Amateur (Gast)


Lesenswert?

Ach so, ich vergaß: Wie bereits von anderen angedeutet kann sich beim 
Einschalten "Schmutz" in das Empfangsregister einschleichen.
Aus diesem Grund kann es nicht schaden, nach dem Einschalten der 
Betriebsspannung, und einer gehörigen Wartezeit, das Empfangsregister, 
auf Verdacht, zu putzen.

Vor ein paar Jahren hatte ich mal Probleme dadurch, dass ich ein 
Protokoll, mit nur einem Stoppbit verwendet habe. Irgendwie ist der mit 
der Suche nach dem Anfang des nächsten Datums durcheinander gekommen. 
Nach einer Änderung auf 2 Stoppbit, lief das Ganze Jahrelang problemlos.

von Michi87 (Gast)


Angehängte Dateien:

Lesenswert?

leider habe ich am Wochenende nicht nach Hause gekommen und konnte keine 
Fotos machen. Anbei nur mal eine schnelle Skizze. An den Ports LED1 und 
LED2 hängt jeweils eine LED mit widerstand und wird mit ca. 10mA 
betrieben.
Die Ausgangsspannung am MP1584EN beträgt 3.3V.

Es handelt sich bei dem Atmega um eine TQFP Version.
Jetzt habe ich irgendwo im netzt gelesen, dass ich an jedem VCC/GND paar 
einen Abblockkondensator positionieren soll. Dies habe ich nur an einer 
Stelle je uC gemacht. Aber kann das der Fehler sein?
Oder kann es sein, dass ich einen grösseren Kondensator einlöten muss?

Den Code versuche ich schnellstmöglich zu organisieren.

von Sven L. (svenl)


Lesenswert?

Michi87 schrieb:

> Jetzt habe ich irgendwo im netzt gelesen, dass ich an jedem VCC/GND paar
> einen Abblockkondensator positionieren soll. Dies habe ich nur an einer
> Stelle je uC gemacht. Aber kann das der Fehler sein?
> Oder kann es sein, dass ich einen grösseren Kondensator einlöten muss?

Wenn ich so etwas schon lese... :)

Maßgebend für die Beschaltung des Controllers ist sein Datenblatt und im 
Datenblatt steht, dass für jedes Vcc-GND-Paar ein Abblockkondensator 
erforderlich ist.

Es spricht sogar Empfehlungen aus wie AVcc beschaltet werden muss.

Zusätzlich gibt der Hersteller Empfehlungen von sogenannten Application 
Notes heraus. Diese hier dürfte für die Reset-Beschaltung interessant 
sein: AVR040 http://www.atmel.com/images/doc1619.pdf

Erst dann kann man definiertes Verhalten gemäß dem Datenblatt 
erwarten...

Leute, lest endlich die Datenblätter!

Viele Grüße!

Sven

von Michi87 (Gast)


Lesenswert?

OK, also noch etwas ganz wichtiges hatte ich vergessen :-(

Ich habe das alles auch mal auf dem Steckbrett aufgebaut mit der DIP 
Version des Atmega328. Damit klappt alles problemlos.

Also schliesse ich die Software aus.

Ich habe somit mir eine Leiterplatte erstellt und einfach eben alle VCCs 
und den AVCC miteinander verbunden und auch alle GND.

Ich werde heute Abend mal versuchen an alle VCC-GND bzw. AVCC-AGND die 
Kondensatoren anzulöten.

Gruss

von Peter D. (peda)


Lesenswert?

Michi87 schrieb:
> Ich werde heute Abend mal versuchen an alle VCC-GND bzw. AVCC-AGND die
> Kondensatoren anzulöten.

Daran liegt es kaum. Die AVRs sind recht robust und oft mit einem 
Kondensator zufrieden.

Wie sieht denn Dein Protokoll aus, d.h. wie synchronisieren sich die 
beiden MCs aufeinander?

von Michi87 (Gast)


Lesenswert?

Also nun verstehe ich gar nichts mehr.
Ich habe folgenden Code versucht und nicht einmal das klappt.
Also das sollte normal ohne Probleme klappen.
1
#define LED1 3
2
#define LED2 5
3
4
void setup()
5
{
6
  pinMode(LED1, OUTPUT);
7
  pinMode(LED2, OUTPUT);
8
  analogWrite(LED1, 0);
9
  analogWrite(LED2, 0);
10
  delay(2000);
11
}
12
13
void loop()
14
{
15
  analogWrite(LED1, 0);
16
  analogWrite(LED2, 255);
17
  delay(100);
18
  analogWrite(LED2, 0);
19
  analogWrite(LED1, 255);
20
  delay(100);
21
}

von Flip B. (frickelfreak)


Lesenswert?

Mach an beide einen Stabilen Taktgeber also quarz oder resonator und 
stelle die Fuses passend ein. dann verstehen sie sich garantiert.

von Michi87 (Gast)


Lesenswert?

Das ändert aber nichts daran ,das jetzt nicht einmal mehr das kleine 
Programm oben läuft bei dem nur 2 LEDs abwechselnd blinken sollen.
Dieses Programm ist nur auf einem der Atmega aufgespielt. Kann es sein 
dass die RX,TX Signale die der zweite sendet den ersten dermaßen stören. 
Ich habe irgendwo im Arduino Forum mal gelesen, dass man RX gegen GND 
schalten soll, aber dann wäre ja später keine Kommunikation mehr möglich 
wenn ich RX mit einem 10kOhm Widerstand gegen GND lege.

von Carlo (Gast)


Lesenswert?

Michi87 schrieb:
> ... Kann es sein
> dass die RX,TX Signale die der zweite sendet den ersten dermaßen stören.

Ja, kann sein. Alles ist möglich und das Chaos ist wahrscheinlicher als 
die Ordnung.

von Michi87 (Gast)


Lesenswert?

RX, TX habe ich nun abgehängt. Immer noch klappt es nicht.

Es klappt vielleicht 1 Mal von 10 Mal dass die LEDs wie gewünscht 
blinken. Ist irgendwie eher zufällig, aber die Wahrscheinlichkeit ist 
verschwindend gering das es klappt. In den meisten fällen leuchten 
einfach alle LEDs mit voller Helligkeit.

von Carlo (Gast)


Lesenswert?

Lothar M. schrieb:
> Also brauchen wir für eine sinnvolle Fehleranalyse das, was du vor dir
> hast:
> 1. den Schaltplan
> 2. Fotos vom Aufbau
> 3. das Programm

von Michi87 (Gast)


Lesenswert?

Schaltplan ist oben skizziert. Programm ist auch oben zu sehen.
Foto folgt noch, aber da gibt es nichts spektakuläres zu sehen, aber 
mache ich gerne nachher noch

von Flip B. (frickelfreak)


Lesenswert?

Flip B. schrieb:
> Mach an beide einen Stabilen Taktgeber also quarz oder resonator
> und
> stelle die Fuses passend ein. dann verstehen sie sich garantiert.

von Flip B. (frickelfreak)


Lesenswert?

Michi87 schrieb:
> #define LED1 3
> #define LED2 5
>
> void setup()
> {

>   analogWrite(LED2, 0);
>
> }



Stelle auch bitte sicher, dass genau das Programm auch auf dem Micro 
läuft.

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.