Forum: Mikrocontroller und Digitale Elektronik Programm funktioniert erst nach 1-2 maligem Reset


von RFM12 (Gast)


Angehängte Dateien:

Lesenswert?

Grüß euch!

Also ich hab ein etwas ungewöhnliches Problem wie ich meine. Der µC 
fängt erst an zu arbeiten nach dem ich ihn ein oder zwei Mal neu aus- 
und wieder eingesteckt habe.

Ich verwende den ATTiny44 und die Software von Benedikt K. zur 
Ansteuerung eines RFM12. Nach dem die Resets durch geführt wurde 
funktioniert auch alles wunderbar. Mittels den Debug LEDs kann ich 
nachvollziehen, dass wenn es hängt es immer in der ersten send() 
Funktion hängt.


Ich kann mir, das nicht so ganz erklären, ev. hat von euch jemand eine 
Idee.

Lg

von Oliver J. (skriptkiddy)


Lesenswert?

Hast du vielleicht die 100nF an allen Versorgungsanschlüssen vergessen?

von Conny G. (conny_g)


Lesenswert?

Das RFM12 braucht 100ms zur Initialisierung, vielleicht geht es deshalb 
erst das zweite Mal?
D.h. bevor man irgendetwas vom RFM liest oder zu ihm sendet erst einmal 
100ms warten.

: Bearbeitet durch User
von RFM12 (Gast)


Lesenswert?

Wo müssten die 100nF Kondis denn genau hin?
Sind die wirklich nötig? Kann mir nicht vorstellen, dass die mit diesem 
Phänomen zu tun haben?!

@Conny:
In der rf12_init() Fuktion wird bereits 100ms gewartet bevor irgendetwas 
gemacht wird.

Lg

von jibi (Gast)


Lesenswert?

>Sind die wirklich nötig?

ja.

>Wo müssten die 100nF Kondis denn genau hin?

>...Versorgungsanschlüssen...

von Udo S. (urschmitt)


Lesenswert?

RFM12 schrieb:
> Kann mir nicht vorstellen

Elektronik hat viel mit Wissen und weniger mit Vorstellungsgabe bei 
keinem Wissen zu tun.

von RFM12 (Gast)


Lesenswert?

Jetzt wird es noch geiler.

Hab 2 x 100nF dazu gelötet. Einmal für die Versorgung des µC's und ein 
mal für das RFM12. Also zwischen +5V und GND.

Und jetzt kommts, danach funktioniert es überhaupt nicht mehr. Egal wie 
oft ich es aus- und einschalte. Erst nachdem ich die C's wieder entfernt 
hab, hat es nach 2 maligem AUS/EIN wieder funktioniert.

von Uwe (Gast)


Lesenswert?

Dann stimen die Werte nicht (100nF) oder einer oder beide sind kaputt.
Die Müssen halt rein sonst Funktioniert deine Schaltung nicht.

von Conny G. (conny_g)


Lesenswert?

Ist es ein RFM12 für 5V oder ein RFM12B für 3.3V?

Und poste doch mal ein Bild der Platine (Vorder- und Rückseite).

: Bearbeitet durch User
von RFM12 (Gast)


Angehängte Dateien:

Lesenswert?

Also nachdem die C's wiederum angebracht wurden zeigt sich keine 
Besserung des Problems.
Danke für eure Antworten!

von RFM12 (Gast)


Lesenswert?

Sry, ist vielleicht etwas unklar formuliert. Es funktioniert nun wie 
oben im ersten Post. Am Grundproblem hat sich also nichts verändert.

von Markus (Gast)


Lesenswert?

Die Cs zum Abblocken gehören nahe die an die Speisungs-Pins und nicht 
Kilometerweit entfernt. So nützen sie garantiert nichts.

von Michael S. (e500)


Lesenswert?

Also irgendwie sieht das so aus, als ob zwischen Pin 11 und Pin 12 auf 
Deiner Streifenplatine Kurzschlüsse wären.

Nimm einen Durchgangsprüfer und schau mal, ob da nicht noch mehr 
Kurzschlüsse sind, die evt. auch erst bei mechanischer Belastung 
entstehen, das könnte erklären, weshalb nach dem Einlöten der Abblock-Cs 
gar nix mehr ging, weil halt irgendwo ein Kurschluss war, der nachher 
wieder weg war ...

von RFM12 (Gast)


Lesenswert?

Danke für eure Antworten.

Wegen den Kurzschlüssen schau ich morgen. Noch eine Frage zu den C's. 
Soll ich sie direkt an die Pins des Sockel löten?

Lg

von Markus (Gast)


Lesenswert?

RFM12 schrieb:
> Noch eine Frage zu den C's.
> Soll ich sie direkt an die Pins des Sockel löten?

Am besten schon, möglichst nahe und zwar beide Anschlüsse (+ und GND) 
sollten möglichst kurze Wege haben zum IC.

Oder zumindest noch eine direkte kurze GND Verbindung vom Attiny GND zum 
C einfügen.
Auch am RFM12 direkt an die Speisung.

Die Frage ist auch, mit was wird es gespiesen? Wie lange ist Zuleitung?

von Achim K. (aks)


Lesenswert?

In rf12.c
1
#define F_CPU 800000UL
2
...
3
    _delay_us(0.3);

Irgendwo steht, Du nutzt 8MHz. Kann es sein, dass da eine 0 fehlt?
Wäre zumindest ein Versuch wert, ob es mit 8000000 besser läuft.

Das mit den Block Kondensatoren ist meiner Erfahrung nach immer relativ. 
Wenn man eine Platine mit "dünnen" Leitungen macht, ist das mit der Nähe 
des Kondensators schon sehr wichtig. Bei Lochraster hätte ich getippt, 
dass Deine Ausführugn ganz OK ist. Bei Modulen sind solche Kondensatoren 
immer "interressant". Sollte eigentlich im Datenblatt stehen, wenn die 
benötigt werden. Meistens sind die aber eben "so dicht wie möglich" dran 
an den Chips, und das ist oft AUF der Platine so das die zusätzlichen 
nicht wirklich benötigt werden.

von RFM12 (Gast)


Angehängte Dateien:

Lesenswert?

Michael S. schrieb:
> Also irgendwie sieht das so aus, als ob zwischen Pin 11 und Pin 12 auf
> Deiner Streifenplatine Kurzschlüsse wären.

Kurzschlüsse hab ich leider keine gefunden :(.

Markus schrieb:
> Am besten schon, möglichst nahe und zwar beide Anschlüsse (+ und GND)
> sollten möglichst kurze Wege haben zum IC.

Hab ich nun gemacht. Das Problem ist, dass es nun wieder schlechter als 
vorher funktioniert?!

> Die Frage ist auch, mit was wird es gespiesen? Wie lange ist Zuleitung?

Versorgung über USB. Siehe Bild.

Achim K. schrieb:
> Irgendwo steht, Du nutzt 8MHz. Kann es sein, dass da eine 0 fehlt?
> Wäre zumindest ein Versuch wert, ob es mit 8000000 besser läuft.

Danke! Das werde ich verbessern. Obwohl es, das wahrscheinlich nicht 
ist, denn sonst würde es gar nicht funktionieren?! Bzw. die Warte Zeiten 
wären total falsch und so falsch kommt es mir leider nicht vor...

von Hans H. (hanshi)


Lesenswert?

Reset-Beschaltung am Controller fehlt!

von Thomas (kosmos)


Angehängte Dateien:

Lesenswert?

Programmiere mal die Fuses so das der ATTiny erst nach 64 mSek losrennt, 
bis dahin sollte die Versorgungsspannung stabil sein also Elkos voll. 
Zur Not kann man noch über die Resetbeschaltung RC-Glied den Start noch 
etwas verzögern damit das RFM12 seine 100mSek Zeit bekommt.

Du solltest dir mal für solche Versuchsaufbauten ein Steckbrett z.B. von 
Reichelt zulegen. Siehe Anhang dort sieht du auch wo die 100nF Kerkos 
hingehören. Also möglichst nah zw. VCC und GND bzw AVCC und AGND und der 
Resetpin sollte auch noch einen bekommen dann ist die Gefahr 
unerwünschter Resets aufs mindeste reduziert.

Zu den Abblockkondensatoren, diese sind sehr niederohmig und können 
kurze höhe Ströme liefern, dadurch werden die Leitungen der 
Versorgungsspannung nicht mit diesen kurzen Impulsen belastet und 
erzeugen dadurch auch keine Störsignale. Mit dem Multimeter sieht man 
soetwa nicht da sind 5V immer 5V auch wenn diese total durch solche 
Störungen verseucht sind.

von Achim K. (aks)


Lesenswert?

> Danke! Das werde ich verbessern. Obwohl es, das wahrscheinlich nicht
> ist, denn sonst würde es gar nicht funktionieren?! Bzw. die Warte Zeiten
> wären total falsch und so falsch kommt es mir leider nicht vor...

Was es "wahrscheinlich auch nicht" ist,
1
  cbi(RF_PORT, CS);
2
  for (i=0; i<16; i++)
3
  {
4
    if (wert&32768)
5
      sbi(RF_PORT, SDI);
6
    else
7
      cbi(RF_PORT, SDI);
8
    werti<<=1;
9
    if (RF_PIN&(1<<SDO))
10
      werti|=1;
11
    sbi(RF_PORT, SCK);
12
    wert<<=1;
13
    _delay_us(0.3);
14
    cbi(RF_PORT, SCK);
15
  }
16
17
  sbi(RF_PORT, CS);

es ist nur das Timing für SCK High bestimmt, alles andere nicht. Also 
die Zeiten für CS sind eher undefiniert, die Zeiten für SCK Low sind 
undefiniert.

von Klaus I. (Gast)


Lesenswert?

RFM12 schrieb:
> Markus schrieb:
>> Am besten schon, möglichst nahe und zwar beide Anschlüsse (+ und GND)
>> sollten möglichst kurze Wege haben zum IC.
>
> Hab ich nun gemacht. Das Problem ist, dass es nun wieder schlechter als
> vorher funktioniert?!

Sollte man als Abblockkondensatoren nicht Keramikkondensatoren (Material 
Z5U oder X7R) verwenden? Folienkondensatoren sollen ja eine 
Schwingungsneigung fördern.

Grüsse
Klaus

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

RFM12 schrieb:
> Siehe Bild.

Bitte Bildformate beachten!  Niemand braucht die matschigen Fotos
mit einer derart riesigen Auflösung.

von RFM12 (Gast)


Angehängte Dateien:

Lesenswert?

Leider besteht das Problem immer noch. Ich musste die Schaltung wieder 3 
Mal an- abstecken damit sie funktioniert hat.
Ich muss mir einen feinere Lötspitze besorgen. Das anlöten des 
Kondensators am RFM12 war schwierig und die Lötpunkte ungenau. Deswegen 
hab ich ihn fürs erste weggelassen. Das Problem scheint aber zumindest 
beim RFM12 zu sein. Ich hab folgenden Code in der Main:
1
  PORTB |= (1 << PB2);
2
  // Initialization
3
  INIT_ANALOG_COMP();
4
  rf12_init();          // ein paar Register setzen (z.B. CLK auf 10MHz)
5
  rf12_setfreq(RF12FREQ(868.92));  // Sende/Empfangsfrequenz auf 868.92MHz einstellen
6
  rf12_setbandwidth(4, 0, 0);    // 200kHz Bandbreite, -6dB Verstärkung, DRSSI threshold: -79dBm 
7
  rf12_setbaud(4800);        // 4800 baud
8
  rf12_setpower(0, 5);      // 10mW Ausgangangsleistung, 120kHz Frequenzshift
9
  set_sleep_mode(SLEEP_MODE_IDLE);  // Only Idle Sleep mode will be used
10
11
  // Global Interrupts enable
12
  sei();
13
  
14
  PORTA |= (1 << PA7);

Es ist dann so, dass die erste LED angeht, die Zweite aber nicht. Das 
bedeutet wohl, dass er irgendwo beim initialisieren hängen bleibt. Aber, 
dass es manchmal funktioniert und dann wieder nicht ist schon 
eigenartig?!


Diese Dinge hab ich nun an meiner Schaltung nachgeholt:

Achim K. schrieb:
> Irgendwo steht, Du nutzt 8MHz. Kann es sein, dass da eine 0 fehlt?
> Wäre zumindest ein Versuch wert, ob es mit 8000000 besser läuft.

Hab ich nun geändert. Das neue Programm steht im Anhang.


Hans H. schrieb:
> Reset-Beschaltung am Controller fehlt!

Hab ich ergänzt. Neue Schaltung im Anhang!


Thomas O. schrieb:
> Programmiere mal die Fuses so das der ATTiny erst nach 64 mSek losrennt,
> bis dahin sollte die Versorgungsspannung stabil sein also Elkos voll.

Waren bereits eingestellt.


Thomas O. schrieb:
> Zur Not kann man noch über die Resetbeschaltung RC-Glied den Start noch
> etwas verzögern damit das RFM12 seine 100mSek Zeit bekommt.

Die 100ms sind bereits in der rf12_init() Funktion vorgesehen.

@Achim K.: Die Definition von F_CPU findet auch noch mal in der delay.h 
statt. Dort ist/war es korrekt 8000000UL. Deswegen hat es wahrscheinlich 
auch funktioniert. Wenn du in der main() schaust, dann befindet sich 
dort eine Warteschleife von 3 Sekunden: Die hat super funktioniert.

Klaus I. schrieb:
> Sollte man als Abblockkondensatoren nicht Keramikkondensatoren (Material
> Z5U oder X7R) verwenden?

Hab diese hier: 
http://www.pollin.de/shop/dt/MTkzOTk3OTk-/Bauelemente_Bauteile/Passive_Bauelemente/Kondensatoren/MKT_Kondensator.html
Das sollten doch Keramik-C's sein oder?

Jörg Wunsch schrieb:
> Bitte Bildformate beachten!  Niemand braucht die matschigen Fotos
> mit einer derart riesigen Auflösung.

Sry, die letzten waren für nix. Aber wenn man sich die Schaltung 
anschauen will dann braucht man doch mehr Auflösung?!

von Conny G. (conny_g)


Lesenswert?

Bist Du sicher, dass Dir der Analog Comp Int nicht gleich die LED wieder 
umschaltet, die Du als 2. anschaltest?

von Klaus I. (klauspi)


Lesenswert?

RFM12 schrieb:
> Klaus I. schrieb:
>> Sollte man als Abblockkondensatoren nicht Keramikkondensatoren (Material
>> Z5U oder X7R) verwenden?
>
> Hab diese hier:
> 
http://www.pollin.de/shop/dt/MTkzOTk3OTk-/Bauelemente_Bauteile/Passive_Bauelemente/Kondensatoren/MKT_Kondensator.html
> Das sollten doch Keramik-C's sein oder?

Leider nicht :o)
Du hast Folienkondensatoren. Im Kondensator-Artikel des hiesigen Wikis 
ist auch ein Link auf den Beitrag "Abblockkondensator Kerko oder Folie"

Als Abblockkondensator nimmt man üblicherweise 100 nF 
Vielschicht-Keramikkondensatoren (Material bevorzugt X7R oder auch zur 
Not Z5U).

Grüße
Klaus

von RFM12 (Gast)


Lesenswert?

Conny G. schrieb:
> Bist Du sicher, dass Dir der Analog Comp Int nicht gleich die LED wieder
> umschaltet, die Du als 2. anschaltest?

Nein, sicher bin ich mir nicht. Da ich aber nichts an diesem Eingang 
anlege geh ich davon aus, dass er nicht triggert.

Klaus I. schrieb:
> Als Abblockkondensator nimmt man üblicherweise 100 nF
> Vielschicht-Keramikkondensatoren (Material bevorzugt X7R oder auch zur
> Not Z5U).

Gibts die irgendwo anders als bei Farnell? :S

von Mirki (Gast)


Lesenswert?

Brauchst du keinen Quarz wenn du mit 8 MHz Taktest?

von Conny G. (conny_g)


Lesenswert?

RFM12 schrieb:
> Conny G. schrieb:
>> Bist Du sicher, dass Dir der Analog Comp Int nicht gleich die LED wieder
>> umschaltet, die Du als 2. anschaltest?
>
> Nein, sicher bin ich mir nicht. Da ich aber nichts an diesem Eingang
> anlege geh ich davon aus, dass er nicht triggert.

Schalt ihn zur Sicherheit mal nicht an.

>
> Klaus I. schrieb:
>> Als Abblockkondensator nimmt man üblicherweise 100 nF
>> Vielschicht-Keramikkondensatoren (Material bevorzugt X7R oder auch zur
>> Not Z5U).
>
> Gibts die irgendwo anders als bei Farnell? :S

von Bülent C. (mirki)


Lesenswert?

Dein Tiny hat ja einen internen ~8MHz Taktgeber...Dieser wird stark 
durch die Versorgungsspannung und der Tempratur beinflusst....Vielleicht 
auch mal in diese Richtung denken ;-)

von Luca E. (derlucae98)


Lesenswert?

RFM12 schrieb:
> Klaus I. schrieb:
>> Als Abblockkondensator nimmt man üblicherweise 100 nF
>> Vielschicht-Keramikkondensatoren (Material bevorzugt X7R oder auch zur
>> Not Z5U).
>
> Gibts die irgendwo anders als bei Farnell? :S

Die gibts überall. http://www.reichelt.de/?ARTICLE=22853; zum Beispiel.

von RFM12 (Gast)


Lesenswert?

Bülent C. schrieb:
> Dein Tiny hat ja einen internen ~8MHz Taktgeber...Dieser wird stark
> durch die Versorgungsspannung und der Tempratur beinflusst....Vielleicht
> auch mal in diese Richtung denken ;-)

Also erst wieder mit Takt des RFM12 versorgen? Ich sträube mich aber 
irgendwie dagegen eine Leitung mit 10MHz quer über das Board zu legen. 
Es kann doch nicht so schlimm sein, dass der Takt ein wenig schwankt?!

Luca E. schrieb:
> Die gibts überall. http://www.reichelt.de/?ARTICLE=22853; zum Beispiel.

Danke!

Conny G. schrieb:
> Schalt ihn zur Sicherheit mal nicht an.

Ja, das könnte ich noch testen.

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.