Hallo Leute, ich habe im AVR Studio ein Programm geschrieben. Beim Übersetzen funktioniert alles super und auch die Sumaltion im AVR Studio läuft. Nun wollte ich das Programm mit einem USBprog übertragen. Habe alle angeschlossen und USBprog wird wohl auch erkannt. Wenn ich nun auf die Schaltfläche AVR klicke kann ich alles auslesen. Also ging ich dann auf Programm übertragen, im Fuß wird auch an allen Positionen OK angezeigt. Wenn ich nun denn ATmega in meine Schaltung stecke geht da nichts los. Das komische wenn ich einen Öffner betätige läuchten auf einmal alle LEDS an den B-Pins. Wobei einer davon im Programm gar nicht integriert ist. Nun wollte ich ja wissen was los ist. Habe also einen total neuen ATmega8 in die Schaltung gesteckt ohne Programm, genau das gleiche Bild. Also denke ich ja, dass das Programm nicht richtig übertragen wurde. Was mache ich wo falsch? Bitte um schnelle Hilfe ;-) Danke
Wie wäre es mit Programm und Schaltung. So kann man nichts oder auch sehr viel sagen.
Da dürfte wohl bei der Schaltung Vieles im argen liegen. Der Knackpunkt steckt wohl in dem Satz: Wenn ich nun den atmega in MEINE Schaltung stecke... Sogar der unprogrammierte atmega macht Unsinn in dieser Schaltung, obgleich er eigentlich garnichts tun sollte, ohne Programm. Da liegts wohl nicht am Kontroller. Oder ist er falschrum in den Sockel gesteckt ? oder passt in die Schaltung irgend ein anderer Kontroller, nicht der von Dir programmierte Typ ? oder....
Werd morgen mal die Schaltung Prüfen, Sockel und Anschluss sind richtig werde mir mal die Lötarbeit ansehen, vielleicht was verhaun, aber am Übertragen kanns nicht liegen oder
lies den programmierten kontrollör wieder aus und vergleiche das mit dem original
hab ich gemacht die hex wurde gezogen wenn ich die dann als prjoject speicher, öffnet sich meine eigentliche .asm, also keine neue datei, is des normal?
>total neuer unprogrammierter Kontroller
Also denke einmal logisch: Wenn der neue, unprogrammierte Kontroller in
den Sockel gesteckt wird, und reset stimmt, dann sind seine I/O-pins im
hochohmigen Zustand, ohne pullup.
Dann dürfte die Schaltung nichts anderes tun wie ohne eingesteckten
Kontroller.
Dann kann es doch nur so sein, dass der eingesteckte Kontroller , weil
er grottenfalsch angeschlossen ist, irgendwelche Verbindungen herstellt,
die die beschriebene Funktion ermöglichen.
Hi Peter Ohne deine hochgeheime Schaltung näher zu betrachten sag ich mal, da ist was falsch..... Also nach deiner Aussage betätigst du einen Öffner. An den anderen Eingängen sind nach wie vor die Potentiale der Taster, nur der betätigte "verliert" sein Potential, weches auch immer. (Bei einem VCC - Potential helfen auch keine Pull-Up's) Kommen wir nun zum Abschnitt: das heitere Fehler erraten mit Peter.... Gruß oldmax
Hochgeheim ist erst mal nichts, habe die Schaltung noch einmal neu aufgelötet nun funktioniert auch fast alles so wie gewollt. Der ATmega denn ich im Betrieb hatte wurde durch irgendeine Überspannung zerstört. Nun aber doch noch eine Frage an alle Programmierer. Folgendes Programm: .include "m8def.inc" ldi r16, 0xFF ;Port B sind Ausgänge out DDRB, r16 ;Port B Ausgänge ldi r16, 0x00 ;Port D sind Eingänge out DDRD, r16 ;Port D Eingänge ldi r16, 0xFF ;Port B Startzustand out PORTB, r16 ;Port B Startzustand .cseg Anfang: sbis PinD, 1 ; Aus Betätgit? rjmp Ende1 ; Wenn ja dann Ende1 sbic PinD, 0 ; Ein Betätigt? rjmp Anfang ; Wenn Nein dann Anfang sbis PortB,0 ; PortB 0 dann Anfang rjmp Anfang ; Wenn 1 dann Weiter cbi PortB, 0 ; LED 1 an cbi PortB, 1 ; LED 2 an rjmp Anfang ; zu Anfang Ende1: sbi PortB, 0 ; LED 1 aus sbi PortB, 1 ; LED 2 aus rjmp Anfang ; Anfang damit wieder neu los gehen kann ende: rjmp ende Nun Nach los lassen vom Taster 1 also wieder 1 an PinD 0 sollten die LEDs anbleiben, tun sie aber nicht, PinD 1 gibt auch kein 0 Signal somit wird auch ENDE1 nicht ausgeführt. Warum läuft die Selbsthaltung dann nich?
> Warum läuft die Selbsthaltung dann nicht? Weil der von der Programmlogik geforderte Pullup-Widerstand an dem active-low (SBIS!) Taster AUS fehlt? Weil der von der Programmlogik geforderte Pulldown-Widerstand an dem active-high (SBIC!) Taster EIN fehlt? http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Tasten_und_Schalter
Da der Ein-Schalter ein Schliesser ist besitzt er einen Pull-Up, Der Aus-Schalter ist eine Öffner ist somit an 5V geschalten und besitzt einen Pull-Down. Daran kann es eigentlich nicht liegen, der AVR weiß immer was los ist. Habe das auch an denn Pins durchgemessen. 4,8 Volt bzw. glatte 0 Volt.
>> PinD 1 gibt auch kein 0 Signal > Pins durchgemessen. 4,8 Volt bzw. glatte 0 Volt. Widerspricht sich IMHO. Schaltplanskizze des Aufbaus und Datenblatt der Schalter wäre sinnvoll.
Was Widerspricht sich denn da? Wenn ich zum Ausschalten ein =-Signal benötige dann ist es doch günstig, wenn ich kein 0 Signal habe. Null bekomm ich wenn GND über Pull-Down am PinD 1 anliegt, ist jedoch der Aus-Taster unbetätigt (Öffner) habe ich direkt 5V am PinD 1, gemessen 4,8 ist absolut ok!
Ach so. Ich hatte in der von mir so gelesenen Dreierfehlerkette > 1. sollten die LEDs anbleiben, tun sie aber nicht, > 2. PinD 1 gibt auch kein 0 Signal > 3. somit wird auch ENDE1 nicht ausgeführt. 2 als wahrscheinlichsten Übeltäter identifiziert (=> Frage nach der Schaltung) und war baff überrascht, als du später geschrieben hast, dass der Aus-Schalter doch saubere HIGH/LOW Pegel bringt. Du hast anscheinend nur Fehler 1. Und mit der Messung 2 erklärst du, dass die LEDs bei 1 nicht durch 3 ausgeschaltet werden. Sorry für die Verwirrung. Ich mach mal Pause.
Ok hab mich vielleicht schlecht ausgedrückt, aber wie sollte es denn aussehen, wenn ich mit einem Schalter eine LED einschalten will. Wenn ich denn los lasse bleibt die LED an und wenn ich einen zweiter Taster drücke geht sie wieder aus. Bitte um einen Tipp. Worauf muss bei der Verdrahtung geachtet werden, wie in Assembler aussehen?
> Da der Ein-Schalter ein Schliesser ist besitzt er einen Pull-Up, > Der Aus-Schalter ist eine Öffner ist somit an 5V geschalten und > besitzt einen Pull-Down. Deine Beschreibungen sind verwirrend. War es wirklich notwendig, da 2 verschiedene Taster zu benutzen? Kein Wunder das du da durcheinander kommst. Ich würde es auch. Also: Taster für ein: Ist er nicht gedrückt, liegt am Pin eine 1 an wird er gedrückt, dann schaltet er den Pin auf 0 Taster für aus: Ist er nicht gedrückt, liegt am Pin eine 1 an wird er gedrückt, dann schaltet er den Pin auf 0 -> aus Sicht des Prozessors verhalten sich beide Taster gleich. Ein nicht gedrückter Taster macht sich mit einem 1 Bit bemerkbar. Ein gedrückter Taster mit einem 0 Bit. Ich würde das erst mal kanonisch schreiben und nicht versuchen da zuviel zu tricksen
1 | Anfang: |
2 | sbis PinD, 1 ; Aus Betätgit? |
3 | rjmp LedAus ; Wenn ja dann Leds ausschalten |
4 | sbis PinD, 0 ; Ein Betätigt? |
5 | rjmp LedEin ; Wenn ja, dann Leds ausschalten |
6 | |
7 | rjmp Anfang |
8 | |
9 | LedEin: |
10 | cbi PortB, 0 ; LED 1 an |
11 | cbi PortB, 1 ; LED 2 an |
12 | rjmp Anfang ; zu Anfang |
13 | |
14 | LedAus: |
15 | sbi PortB, 0 ; LED 1 aus |
16 | sbi PortB, 1 ; LED 2 aus |
17 | rjmp Anfang ; Anfang damit wieder neu los gehen kann |
Die unterschiedlichen Taster benötige ich wegen der Drahtbruchsicherheit. Die Anlage darf nicht los laufen wenn der Aus-Taster nicht ausschalten könnte. Aber danke für das Programm mit den Sprüngen ist es auch eine gute Idee, nur bei meinem Programm oben müsste das doch auch so gehen, muss man beim anschließen an den AVR etwas beachten? Habe alles mit 5V verbunden war notwendid ist also die drei Pins, und die zwei die 0 brauchen, Dann dan PinD 0 mit Pull-Up einen Schließer und an PinD1 mit Pull-Down einen Öffner, Danach an PinB0 und PinB1 jeweils eine LED mit Vorwiderstand an 5V. Müsste laufen oder?
Peter schrieb: > beim anschließen an den AVR etwas beachten? Habe alles mit 5V verbunden > war notwendid ist also die drei Pins, und die zwei die 0 brauchen, Ach komm. So macht das keinen Spass. Mach einen vernünftigen Schaltplan oder wenigstens ein Photo. Immer das ewige gedankliche Nachzeichnen der Schaltung. Ich hab da ehrlich keinen Bock mehr dazu.
@Peter So hab das mal auf einem Atmega32 Debuggt! Taster1, und 2 nicht betätigt! Springt das Programm nach Ende1 und schaltet die LED's aus. Nur Taster1 betätigt und nur solange er betätigt ist leuchten die LED's an PortB. Leuchten die LED's erstmal und wird zum Taster1 nun Taster 2 btätigt springt das Programm an den Anfang zurück und das wiederholt sich solange bis einer der beiden Tasten losgelassen wird. Fall 1: Taster1 wird losgelassen Led's gehen aus und das Programm verharrt in der Schleife "Anfang" immer über Ende1 Fall2: Taster2 wird losgelassen Programm prüft ob PortB 0 und 1 Low sind und verhart dann in der Schleife "Anfang" Wenn der Taster2 zuerst betätigt wird bleiben die Led's aus und das Programm verharrt in der Schleife "Anfang" Das Programm erfüllt die gwünschte Funktion nicht. Da die LED's bei nicht betätigtem Taster1 immer Aus sein werden. Hoffe geholfen zu haben.
Hi Klaus, Danke aber Taster1 darf ja nicht betätigt sein, da es ja ein Öffner ist, Er zieht also im unbetätigtem ZUstand 5V an PinD1 und die Abfrage ist ja "Wenn eine 1 Am PIND1 dann überspringe Jump zu Ende1". Dürfte daran nicht liegen oder?
@Peter! Ja hast recht so funktioniert es. Im unbetätigtem Zustand der Tasten liegt jeweils logisch 1- Signal an PIND,0 und PIND,1. Es wird dann die erste Schleife durchlaufen. Wird nun der Öffner betätigt also Logisch 0-Signal an PIND,1 leuchten die LED's. Bleibt der Öffner betätigt wird die Schleife mit der Portabfrage PortB,0 und 1 durchlaufen sonst ohne. Wird nun anschliessend der Taster an PinD,0 betätigt gehen die Led's aus. Das gleiche passiert auch wenn du beide Taster betätigst. Also ist der Taster an PortD,0 dominant. Hab das ganze noch mal auf dem Pollin Board und AVR Dragon mit einem Atmega 32 getestet.
Klaus schrieb: > Es wird dann die erste Schleife durchlaufen. > Wird nun der Öffner betätigt also Logisch 0-Signal an PIND,1 > leuchten die LED's. Ok du hast nur die Taster vertauscht, wenn der Schließer betätigt wird leuchten die LEDS also 0-Signal an PIND,0. Nur warum gehen die LEDS gleich wieder aus, wenn ich den Schließer wieder loslasse?
Peter schrieb: > Ok du hast nur die Taster vertauscht, wenn der Schließer betätigt wird > > leuchten die LEDS also 0-Signal an PIND,0. Falsch! Wenn der öffner betätigt wird dann sind die LED's an.
Nachtrag! Also wenn du den Öffner betätigst hast ja an PIND,1 eine 0 dann erst wird wird der Programmteil durchlaufen der die LED's einschaltet.
Versteh ich nicht es heißt doch "überspringe Ende1 wenn PIND1, eine 1 hat und das hat er doch wenn der Öffner unbetätigt ist. Und dann heißt es, überpringe Anfang wenn PinD0, eine 0 hat, also der Schließer betätigt, und dann gehen die LEDS an. Oder?
@Peter sbis PinD, 0 ; Aus Betätgit? Überspringe nächten Befehl wenn das ; I/O Register gesetzt ist. rjmp Ende1 ; Wenn ja dann Ende1 sbic PinD, 1 ; Ein Betätigt? Überspringe nächten Befehl wenn das ; I/O Register gelöscht ist. rjmp Anfang ; Wenn Nein dann Anfang So! beide Taster sind nach deiner Beschaltung vorerst nicht betätigt Ja! Also sieht der Controller an PinD,0 und PinD,1 eine Logische 1. Stimmts? Allerdings ist hier nicht definiert welcher der Öffner ist aber der ist ja an PinD,1 angeschlossen. Beim ersten Befehl wird ja abgefragt ob PinD,0 1 ist oder 0. Da der µC aber ne logische 1 sieht wirde rjmp Ende1 übersprungen. Beim nächsten Befehl wird geprüft ob PinD,1 1 oder 0 ist. Der µC sieht aber ne logische 1 also wird der Befehl rjmp Anfang ausgeführt. Kannst das Nachvollziehen??
Klaus schrieb: > sbis PinD, 0 ; Aus Betätgit? Überspringe nächten Befehl wenn das > > ; I/O Register gesetzt ist. > > rjmp Ende1 ; Wenn ja dann Ende1 > > > > sbic PinD, 1 ; Ein Betätigt? Überspringe nächten Befehl wenn das > > ; I/O Register gelöscht ist. > > rjmp Anfang ; Wenn Nein dann Anfang Oh Böser Fehler eingeschlichen! Entschuldigung! Muss Ja so sein. sbis PinD, 1 ; Aus Betätgit? rjmp Ende1 ; Wenn ja dann Ende1 sbic PinD, 0 ; Ein Betätigt? rjmp Anfang ; Wenn Nein dann Anfang So! beide Taster sind nach deiner Beschaltung vorerst nicht betätigt Ja! Also sieht der Controller an PinD,0 und PinD,1 eine Logische 1. Beim ersten Befehl wird ja abgefragt ob PinD,1 1 ist oder 0. Da der µC aber ne logische 1 sieht wirde rjmp Ende1 übersprungen. Beim nächsten Befehl wird geprüft ob PinD,0 1 oder 0 ist. Der µC sieht aber ne logische 1 also wird der Befehl rjmp Anfang ausgeführt. Kannst das Nachvollziehen??
Genau so ist es, und läuft auch so, wenn ich nun an PinD0, eine 0 habe, gehen auch die LEDs an. Damit die nicht flakern, wird beim nächsten durchlauf schon mal abgefragt ob die LEDs schon an sind. Weiß nicht ob es notwendig ist aber wie gesagt ohne diese Abfrage flakerts. Sind die LEDs nun an und ich lasse den Taster Ein los, also wieder 1-Signal an PinD0 müsste die Schleife Anfang ausgeführt werden und die LEDs an bleiben. machen sie aber nicht, sondern gehen gleich wieder aus. :-(
@Peter Dein Programm müsste also Funktionieren. Am Anfang deines Postes war ja nicht klar wie deine Beschaltung ist. Deshalb dieses Missverständins und obendrein habe ich die PIND,0 mit PinD,1 vertauscht. Also nochmal Entschuldigung!
Kein Thema auch das es gehen müsste dachte ich mich schon da die Simulation läuft. hast du eine Idee wer da Ärger machen könnte?
Peter schrieb: > 1-Signal an PinD0 müsste die Schleife Anfang ausgeführt werden und die > > LEDs an bleiben. machen sie aber nicht, sondern gehen gleich wieder aus. Also ich kann dir bestätigen, das die Anbleiben bei mir! Prüf nochmal deine Beschaltung! Ich Tipp mal das dein Öffner irgendwie in der luft hängt. wenn also an PinD,1 eine logische 0 feststellst dann werden deine Ausgänge zurückgesetzt.
aber dann dürften die ja gar nicht angehen, da Aus dominant ist, da es als erstes abgefragt wird.
Hmm! Wenn du keine Taste btätigst was machen die LED's! An oder Aus? Wenn den Schließer an PinD,0 betätigst gehen die LED's an ? Wenn die LED's AN sind und du den Taster and PinD,0 los läßt bleiben die LED's dann AN! JA oder Nein? Wenn die LED's AN sind und du noch den Taster an PinD,0 gedrückt hältst und dann den Taster ( öffner) betätigst gehen dann die LED's aus?
Kein Taster betätigt alles Aus Ein Taster betätigt LEDs an solange ich den Taster halte bleiben die auch an, wenn ich dann zeitgleich Aus drücke gehen die LEDs auch aus, Aber wenn ich ein drücke und loslasse, müssten die an bleiben.
Peter schrieb: > Aber wenn ich ein drücke und loslasse, müssten die an bleiben. JA! Müssen dann anbleiben. Hast du ausser der Beschaltung sonst noch etwas an dem Port angeschlossen? Teste wenn es geht deine Beschaltung und dein Programm an einem anderen Port. Musst halt dein Programm entsprechend ändern.
@Peter Also irgend etwas muss den Pind,1 (öffner) herunterziehen. Mess mal die Spannung bei Unbetätigten Taster sollten ja 5V zu messen sein. Ansonsten könnte ich mir vorstellen, das ein Reset ausgelöst wird so, das das Programm ständig von vorne beginnt.
Ja sind 4,8 Volt und Reset habe ich ja mit nem Pull-Up auch auf ein klares 1-Signal gelegt.
Ich hab jetzt mal die Pullups und Taster (drahtbrücken) auf dem Steckbrett aufgebaut und die LED'S. Dein Programm mit deiner Beschaltung funktioniert bei mir Einwand frei. Hast Du die Beschaltung an einem anderen Port schon Probiert?? Hast du die sache auf dem Steckbrett aufgebaut??
Nein anderen Port probiere ich morgen mal. Habe das ganze gelötet, werde noch mal ein paar Durchgänge prüfen... Danke erst mal für die Hilfe
Ok es geht, habe noch mal meinen Lötkolben schwingen lassen, kann sein, dass durch das viele Probieren ein kleiner Wackler drin ist. Aber Danke euch allen für die Hilfe und guten Ideen. Thread kann also geschlossen werden. Danke
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.