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
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.
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
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.
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 ...
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?
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.
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...
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.
> 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.
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
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
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?!
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
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
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 ;-)
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.
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.