Hallo, ich wollte bei der µC Programmierung mit einem einfachen Projekt
einsteigen.
Assembler
STK 500
AtTiny2313
Ich lassen durch 2 Taster auf dem Board eine Zahl hoch bzw. runter
zählen. Diese gebe ich dann auf einer 7 Segment Anzeige aus.
Das Funktioniert soweit zuverlässig und gut.
Tasterentprellung wurde wie in folgendem Link realisiert:
http://www.mikrocontroller.net/articles/AVR-Tutorial:_Tasten#Einfache_Tastenentprellung_und_Abfrage
Nun schließe ich ans Board (über die PIN Stecker) 2 Reedschalter an.
Diese sind ganz üblich zwischen die Pullups vom Board und GND
geschalten.
Starte ich nun das System, fängt der µC auch ohne das Zuführen eines
Magneten an zu zählen, dies aber ganz unregelmäßig, manchmal zählt er
auch viele Sekunden nicht hoch oder runter.
Auf ein Magnet reagiert er, aber auch nicht sehr zuverlässig.
Daten zu den Reedschaltern habe ich leider keine. Es ist jeweils ein
Schließer Kontakt.
Wie gehe ich nun vor?
Wird es ein Software Problem sein (wobei es mit den Tastern vom Board
prima klappt)
Oder gilt es Hardwaretechnisch irgendwelche Störung zu lösen?
Ich hoffe ich konnte mein Problem verständlich schildern!?
Grüße
beginner schrieb:> Starte ich nun das System, fängt der µC auch ohne das Zuführen eines> Magneten an zu zählen, dies aber ganz unregelmäßig, manchmal zählt er> auch viele Sekunden nicht hoch oder runter.
Zählt der auch sinnlos wenn man zufällig mit der Hand in der nähe der
Verdrahtung kommt?
Wie lang sind die Leitungen zu den Schaltern? Unter Umständen kann es
sein das die internen Pullups zu hochohmig sind.
die Leitungen sind ca. 1m lang.
Wenn man an den Drähten herumwackelt kommt es zu "Zählern" und wenn ich
mit der Hand an die Kontakte gehe auch.
Wenn ich die Kontakt sehr nahe aneinander bringen, beeinflussen diese
sich auch.
Sind die Pull Ups vom Board (10k) auch aktiv wenn ich über die
Stiftleiste andere Schalter anstecke?
Wie groß sind die internen Pull Ups vom AtTiny?
Weiterhin...
Wenn ich nur sehr kurz mit dem Magnet an den Kontakt gehe, und eine
Widerstandsmessung mache, dann änder sich der Widerstand von unendlich
auf einigen Kilo bis Mega Ohm. Nur wenn ich wirklich 1 Sekunde oder
länge dran bleibe, dann geht er gegen Null. Ist das bei allen so?
ldi temp, 0xFF
out PORTD, temp
ich habe die internen vom AtTiny nun nochmal aktiviert.
Resultat unverändert!
Jetzt müsste doch aber einmal die Pull Ups vom Board und einmal die vom
µC wirken, oder?
beginner schrieb:> Jetzt müsste doch aber einmal die Pull Ups vom Board und einmal die vom> µC wirken, oder?
Kenne das STK leider nicht.
Vielleicht sind am Board gar keine? Mal irgendwie nachgeprüft? Ansonsten
von Hand nochmal irgendwie Pullups nachrüsten. Die µC internen könnten
zu hochohmig sein.
die vom Board sind 10k und die vom µC sind 20...50k
Wenn die Pull Ups kleiner wären und die ReedKontakte unbetätigt (also R
gegen unendlich), dann gäbe es doch keinen Unterschied!?
beginner schrieb:> Sind die Pull Ups vom Board (10k) auch aktiv wenn ich über die> Stiftleiste andere Schalter anstecke?
Nein, diese liegen nicht an den Controllerpins, sondern an den Tastern.
Sie wirken also nur, wenn Du die Taster des STK500 benutzt.
> Wie groß sind die internen Pull Ups vom AtTiny?
Da müsste ich jetzt ins Datenblatt des Tiny2313 gucken, aber das kannst
Du sicher auch selbst. Ich habe irgendwas oberhalb 30k in Erinnerung.
Ich benutze bei allen AVR-Schaltungen die internen PullUps als Last für
Schalter, Taster, Drehgeber, Reedkontakte, usw. und hatte noch nie
Probleme damit.
beginner schrieb:> Wenn ich nur sehr kurz mit dem Magnet an den Kontakt gehe, und eine> Widerstandsmessung mache, dann änder sich der Widerstand von unendlich> auf einigen Kilo bis Mega Ohm. Nur wenn ich wirklich 1 Sekunde oder> länge dran bleibe, dann geht er gegen Null. Ist das bei allen so?
Das liegt vermutlich an Deinem Ohmmeter. Sicher ein DMM mit Auto-Range,
oder? Nimm den Durchgangsprüfer, der vera..lbert Dich weniger.
beginner schrieb:> Jetzt müsste doch aber einmal die Pull Ups vom Board und einmal die vom> µC wirken, oder?
Die vom Board wirken nur, wenn Du auch die Taster des Boards nutzt. Die
internen hast Du hierdurc eingeschaltet:
beginner schrieb:> ldi temp, 0xFF> out PORTD, tempmr. mo schrieb:> Kenne das STK leider nicht.
Hmmm...
>> Vielleicht sind am Board gar keine?
Weggebeamt???
...
beginner schrieb:> die vom Board sind 10k und die vom µC sind 20...50k
Na siehste...
>> Wenn die Pull Ups kleiner wären und die ReedKontakte unbetätigt (also R> gegen unendlich), dann gäbe es doch keinen Unterschied!?
Dann gäbe es solide H-Pegel an den Eingängen...
...
Ich vermute zunächst, dass mit dem Handkontakt zu den Zuleitungen
kapazitiv oder direkt Störsignale auf die Eingänge kommen. (So wie das
laute Brummen, wenn man an die Eingangsleitung eines Verstärkers
herankommt)
Mit 1k...3k pull-up Widerstand ist die Empfindlichkeit gegen Einstreuung
von Signalen deutlich geringer. Durch einen solch niedrigen externen
pull-up-Widerstand könnte man klären, ob es mit Einstreuungen
zusammenhängt.
beginner schrieb:> Wenn ich nur sehr kurz mit dem Magnet an den Kontakt gehe, und eine> Widerstandsmessung mache, dann änder sich der Widerstand von unendlich> auf einigen Kilo bis Mega Ohm. Nur wenn ich wirklich 1 Sekunde oder> länge dran bleibe, dann geht er gegen Null. Ist das bei allen so?
Wenn der Reed-Kontakt geschaltet hat, geht sein Widerstand auf unter ein
Zehntel Ohm runter, eine Zeitverzögerung spielt sich dabei im
Millisekundenbereich ab. Die Messung ist also irgendwie fehlerhaft oder
das Widerstandsmessgerät reagiert mit der Anzeige ziemlich lahm.
danke bis hierher erstmal - ich werde es mit 1k externen Pull Ups
versuchen.
Es könnten durch die relativ langen Leitungen ja auch noch andere
Störeinkopplungen geben.
Gibt es hier dafür ein Artikel/Bericht/Anleitung wie man seine Schaltung
und Kabel Störsicher macht?
fonsana schrieb:> Der naechste Schritt ist also die Pegel an den Eingaengen zu messen.
Dazu wollte ich "beginner" unterschwellig animieren und ihm dabei das
Gefühl lassen, selbst auf diese Idee gekommen zu sein... ;-))
...
Hannes Lux schrieb:> Gefühl lassen, selbst auf diese Idee gekommen zu sein... ;-))
Der macht das ja noch nicht mal, wenn man es klar sagt. Hoffnungsloser
Fall.
fonsana
okay - gemessen habe ich auch.
An Port D Pin 1 (wo einer der beiden Reedkontakte dran hängt) messe ich,
wenn der Kontakt nicht betätigt ist, 0,015 V.
Wenn der Magnet dran ist, messe ich 0,000 V.
Bei dem anderen genau das gleiche.
Verdammt wenig... wie kann es sein, dass ich beim Durchmessen der
Kontakte ein gegen unendlich großen R messe und nun sowas!?
Das Ergebnis bedeutet doch, das der Widerstand der Leitung+Reedkontakt
wesentlich kleiner sein muss als der Pull Up mit seinen 20...50 kOhm
beginner schrieb:> An Port D Pin 1 (wo einer der beiden Reedkontakte dran hängt) messe ich,> wenn der Kontakt nicht betätigt ist, 0,015 V.> Wenn der Magnet dran ist, messe ich 0,000 V.> Bei dem anderen genau das gleiche.
Also wenn du da einen Schließer hast und einen Pullup sollte aber bei
geöffneten Kontakt da so an die 5V sein. Vielleicht irgendwie einen
Kurzen mit eingebaut? Bist du dir auch sicher einen Pullup und nicht
Pulldown zu haben? Hast du vielleicht im Programmcode irgendwo den
Eingang/Ausgang falsch initalisiert und auf Low gesetzt?!
Irgendwie werde ich das Gefühl nicht los da ist irgendwo ein richtig
simpler Fehler, der mit einer ordentlichen Skizze oder einem Bild
gefunden werden könnte.
Aber bitte auf die Größe des Bildes achten, sonst gehts hier wieder los.
beginner schrieb:> Das Ergebnis bedeutet doch, das der Widerstand der Leitung+Reedkontakt> wesentlich kleiner sein muss als der Pull Up mit seinen 20...50 kOhm
Deine Pullups sind aus... häng mal den ganzen Code an und am besten noch
ein anständiges Bild vom Aufbau.
beginner schrieb:> die vom Board sind 10k und die vom µC sind 20...50k
Nein, das Board hat keine Pullups an den Ports. Die sind direkt an den
Tastern. Sind die nicht angesteckt, gibts keine Hardware-Pullups.
Michael H. schrieb:> beginner schrieb:>> die vom Board sind 10k und die vom µC sind 20...50k> Nein, das Board hat keine Pullups an den Ports. Die sind direkt an den> Tastern. Sind die nicht angesteckt, gibts keine Hardware-Pullups.
Genau. Steck doch mal den Jumper an den passenden Taster. Dann müsstest
du Reedschalter und Taster parallel haben und den Pullup dazu bekommen.
beginner schrieb:> wenn der Kontakt nicht betätigt ist, 0,015 V.
Da ist was faul, das sollten fast 5V sein.
> Wenn der Magnet dran ist, messe ich 0,000 V.
Das ist OK.
Naechster Schritt:
Alles ab von den Eingaengen, nochmal direkt an den Pins messen. Damit
kannst Du dann feststellen, ob die Pullups eingeschaltet sind.
fonsana
ok - ich habs!
Heut morgen habe ich ein neues Projekt erstellt und den gesamten
Quelltext aus dem alten ins neue Kopiert.
Nur µC hat nun nie irgendwelche Änderungen übernommen, also waren die
Pull Ups inaktiv...
Nun funktioniert es, nachdem ich das alte Projekt geöffnet habe.
...
Ich wollte ein neuen Projektnamen vergeben, das ging irgendwie nicht,
deswegen das neue Projekt und die Kopie des Quelltextet.
Was habe ich dabei falsch gemacht?
Möchte das Projekt ja schließlich, wenn es fertig ist, nicht mit dem
Namen "Test" abspeichern...
beginner schrieb:> Heut morgen habe ich ein neues Projekt erstellt und den gesamten> Quelltext aus dem alten ins neue Kopiert.>> Nur µC hat nun nie irgendwelche Änderungen übernommen, also waren die> Pull Ups inaktiv...
Dann hast Du versäumt, im Programmer-Dialog die neue Hexdatei
auszuwählen. Der Programmer-Dialog ist nämlich ein eigenständiges
Programm, das sich einen Dreck um das gerade geöffnete Projekt kümmert,
sondern immer die zuletzt gebrannte Hexdatei und EEPdatei zum Brennen
anbietet. Vielleicht solltest Du Dir angewöhnen, vor dem Klick auf den
Brennbutton mal den Text im Dateinamenfenster zu lesen und zu prüfen, ob
es auch die richtige Datei (im richtigen Ordner) ist.
...
Hannes Lux schrieb:> Dann hast Du versäumt, im Programmer-Dialog die neue Hexdatei> auszuwählen. Der Programmer-Dialog ist nämlich ein eigenständiges> Programm, das sich einen Dreck um das gerade geöffnete Projekt kümmert,> sondern immer die zuletzt gebrannte Hexdatei und EEPdatei zum Brennen> anbietet.
Wo finde ich denn den Programmer-Dialog?
> Vielleicht solltest Du Dir angewöhnen, vor dem Klick auf den> Brennbutton mal den Text im Dateinamenfenster zu lesen und zu prüfen, ob> es auch die richtige Datei (im richtigen Ordner) ist.
Wo ist das Dateinamenfenster?
..das Fenster wo auch mögliche Fehler angezeigt werden?
@beginner
Na ja. Wie und mit welchem Hilfsmittel überträgst du denn dein von dir
geschriebenes Programm in den µC?
Im AVR-Studio lässt du dein Programm (welches du als Text geschrieben
hast) übersetzen und kriegst eine Hex-Datei. Und diese Hex-Datei wird an
den µC übermittelt. Und da musst du eben aufpassen, dass du auch die
richtige Hex-Datei überträgst.
Oder vielleicht einen falschen Controller im Projekt-Setup ausgewählt
gehabt? Sowas geht erstaunlich lange gut, bis dann die "merkwürdigen"
Fehler auftreten...
Der Controller ist richtig - der AtTiny 2313
Karl Heinz Buchegger schrieb:> Und da musst du eben aufpassen, dass du auch die> richtige Hex-Datei überträgst.
Wie passe ich denn darauf auf?
Ich schreibe den Text.
Mit F7 (Assemble) übersetze ich und wenn ich dann auf
"Connect to the Selected AVR Programmer" drücke,
erscheint das Dialogfenster wo ich die Fuses usw. einstellen kann.
Dann wird die Schaltfläche daneben aktiv:
"Write Flash Memory Using the Current Settings"
fertig.
Als ich das neue Projekt erstellt habe, bin ich doch auch genauso
vorgegangen wie beim ersten mal, nur das ich eben den kompletten
Quelltext kopiert und unter diesem neuen Projekt abgespeichert habe.
beginner schrieb:> Wie passe ich denn darauf auf?>> Ich schreibe den Text.> Mit F7 (Assemble) übersetze ich ....
Jetzt wird aber langsam mal Zeit, dass Du erzählst, welche SW Du
benutzt!
Gruß Dietrich
Hi Hannes Lux,
was mir auch schon passiert ist>>
habe zu Beginn die internen Pull Ups aktiviert
und im Laufe des Programm-Codes wieder kapput gemacht.
Seitdem achte ich auf "sbi / cbi.
Man kennt ja seinen Quelltext nicht, schade!
Grüße
Rolf
Rolf Hegewald schrieb:> habe zu Beginn die internen Pull Ups aktiviert> und im Laufe des Programm-Codes wieder kapput gemacht.
Genau das wäre auch mein Tipp.
Daher...
Michael H. schrieb:> Deine Pullups sind aus... häng mal den ganzen Code an und am besten noch> ein anständiges Bild vom Aufbau.
^^
Rolf Hegewald schrieb:> Man kennt ja seinen Quelltext nicht, schade!
Auch wenn es arrogant klingt, ich benutze keinen fremden unverstandenen
Programmcode. Ich bau' auch nix nach, was ich nicht volständig
verstanden habe. Ich mach' mein eigenes Ding, auch wenn es oftmals
schlechter ist als das, was man so im Netz findet. Aber es ist meins,
ich verstehe jede Zeile Code und ich bin für meine Fehler selbst
verantwortlich.
Karl Heinz Buchegger schrieb:> Siehe Bild
Danke, das erspart mir das "Turnschuhnetzwerk" zum Bastelrechner, denn
auf dem WWW-Rechner habe ich kein AVR-Studio installiert. Und Dein Bild
zeigt nebenbei, dass "Kalle" keine Beleidigung ist... ;-))
beginner schrieb:> Dann wird die Schaltfläche daneben aktiv:> "Write Flash Memory Using the Current Settings"> fertig.
Jou, und woher stammen die "Current Settings", wann hast Du die zuletzt
"gesettet"? Da hast Du ganz selbstverständlich die Settings des letzten
Projektes benutzt.
Aber tröste Dich, das ist sogut wie jedem Benutzer des AVR-Studios schon
mal passiert. Mir übrigens auch, nur habe ich das selbst herausgefunden
ohne ein Forum oder irgendjemand Anderes zu fragen. Dafür bin ich
gelegentlich bei vielen anderen Sachen "betriebsblind".
Also mach' Dir nichts draus, sieh es als Anlass, zukünftig Dialoge etwas
aufmerksamer zu lesen und nicht nur blind draufloszuklicken. Ein STK500
samt Software ist nunmal kein MP3-Player, da ist etwas mehr
Aufmerksamkeit angesagt...
...
Hannes Lux schrieb:> Aber tröste Dich, das ist sogut wie jedem Benutzer des AVR-Studios schon> mal passiert.
Wie wahr, wie wahr.
Und es ist eines der 'Features' vom AVR-Studio bei dem ich mir (als
professioneller SW-Entwickler) auf den Kopf greife und mich frage: Hat
damals niemand mit dem AVR-Studio gearbeitet oder warum ist keinem
aufgefallen, dass das schwachsinnig ist?
beginner schrieb:> Wie passe ich denn darauf auf?>> Ich schreibe den Text.> Mit F7 (Assemble) übersetze ich und wenn ich dann auf> "Connect to the Selected AVR Programmer" drücke,> erscheint das Dialogfenster wo ich die Fuses usw. einstellen kann.> Dann wird die Schaltfläche daneben aktiv:> "Write Flash Memory Using the Current Settings"> fertig.
Da ist es wieder, die Generation Klicki weiss nicht was da ablaeuft.
Wenn man die ersten drei bis 5 Projekte (koennen auch in der
Groessenordnung 1-3 blinkende LEDs sein) richtig zu Fuss auf der
Kommandozeile gemacht hat, hat man einen komplett anderen Zugang zu dem
Ganzen.
fonsana
Seid nicht so hart. Er hat sich halt den Programmierdialog noch nie
genauer angesehen.
Dafür hab ich Verständnis auch wenn ich es nicht verstehe. Wenn da ein
Dialog mit Reitern aufgeht, dann geh ich alle Reiter einmal durch um zu
sehen, was es da noch so alles gibt. Ich muss ja nicht spastikermässig
auf jeden Button draufklicken, den ich irgendwo sehe.
Im Gegenzug muss ich gestehen, dass ich den Toolbar-Button "Write Flash
Memory Using the Current Settings" noch nie richtig wahrgenommen hatte.
Hi
>Im Gegenzug muss ich gestehen, dass ich den Toolbar-Button "Write Flash>Memory Using the Current Settings" noch nie richtig wahrgenommen hatte.
So unpraktisch ist der Button gar nicht. Man kann halt schnell bei
minimerten Programmer Dialog auf die Funktionen zugreifen.
MfG Spess
spess53 schrieb:> So unpraktisch ist der Button gar nicht. Man kann halt schnell bei> minimerten Programmer Dialog auf die Funktionen zugreifen.
Was aber eben voraussetzt, dass man wenigstens in groben Zuegen weiss
was man da tut.
fonsana
fonsana schrieb:> Da ist es wieder, die Generation Klicki weiss nicht was da ablaeuft.
piano, piano. Er schreibt doch, dass es sein erstes Projekt ist...
"Einfach" benutzbare Tools ermöglichen viel früher Erfolgserlebnisse und
helfen einem, bei der Stange zu bleiben.
Wenn du alles sofort bis ins Detail begreifen willst, kommst du bei
Quarks an und bist alt und grau, bevor du das erste mal "make"
geschrieben hast.
Er hat sich eh ein sehr gut geeignetes Projekt zum Einsteigen gesucht.
Daran scheitern schon viele.
Wenn wir jetzt noch den Code sehen dürfen, finden wir auch den Fehler,
falls es nicht Karl Heinz' Tipp war.
Michael H. schrieb:> Wenn du alles sofort bis ins Detail begreifen willst, kommst du bei> Quarks an und bist alt und grau, bevor du das erste mal "make"> geschrieben hast.
Da bin ich - fuer Sachen die ich oben als Beispiel erwaehnt habe -
anderer Meinung. Fuer blinkende LEDs braucht man kein make. Wenn man
verstanden hat, wie die Kette funktioniert, ist die Verwendung von make
dann auch verstaendlich. Dann scheitert man auch nicht mehr an der
Aussage: "Ich klicke darauf und da kommt so eine komische
Fehlermeldung." Nagut, Fehlermeldungen sollte man dann auch noch lesen
und versuchen zu verstehen.
fonsana
fonsana schrieb:> Dann scheitert man auch nicht mehr an der> Aussage: "Ich klicke darauf und da kommt so eine komische> Fehlermeldung."
Verwechselst du Threads oder hast du hier gar nicht alles gelesen?
Darum gehts doch hier gar nicht... Hier gehts um einen Fehler im Code
oder um einen Bedienungsfehler, der den Besten passiert.
fonsana schrieb:> Aussage: "Ich klicke darauf und da kommt so eine komische> Fehlermeldung."
Da fällst mir ein Student ein, der hat in so einem Fall dann immer
wieder neu geklickt hat mit der Hoffnung, die Fehlermeldung geht
irgendwann mal weg - und wurde immer wütender.
Dabei hatte er die Fehlermeldung auch nach 1/4..1/2 Stunde nicht mal
gelesen.
Gruß Dietrich
Michael H. schrieb:> Hier gehts um einen Fehler im Code> oder um einen Bedienungsfehler,
Hier ging es darum, dass er den Fehler im Code repariert hat und durch
einen Bedienungsfehler immer wieder den alten, nicht mehr gepflegten
Code geflasht hat.
Ich hatte ja nun das Glück (oder Pech), dass ich vor dem Benutzen des
STK500 und AVR-Studio (3,5, dann 4, immernoch 4) als Brenner (als Editor
und Assembler von Anfang an) einen Eigenbau-ISP-Programmer mit
Eigenbau-ISP-Software unter QBASIC benutzte. Dadurch habe ich zwar etwas
Zeit verschwendet, aber verdammt viel über ISP, Fuses, usw. gelernt.
Karl Heinz Buchegger schrieb:> Wie wahr, wie wahr.> Und es ist eines der 'Features' vom AVR-Studio bei dem ich mir (als> professioneller SW-Entwickler) auf den Kopf greife und mich frage: Hat> damals niemand mit dem AVR-Studio gearbeitet oder warum ist keinem> aufgefallen, dass das schwachsinnig ist?
Das steht bei mir von Anfang an auf der (nicht real vorhandenen) Liste
der Verbesserungsvorschläge zum AVR-Studio. Ein Optionsfeld für "Use
Current Project", so wie es das für den aktuellen Debugger gibt, hätte
da viel Benutzerfreundlichkeit gebracht. Da ich aber nicht ohne
triftigen Grund auf neuere Software-Versionen umsteige, habe ich
(moralisch) kein Recht, dies bei Atmel anzumotzen. Also stelle ich mich
darauf ein. Es gibt nunmal keine perfekte Software.
...