Forum: Mikrocontroller und Digitale Elektronik Programm auf ATmega8 übertragen


von Peter (Gast)


Lesenswert?

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

von Hubert G. (hubertg)


Lesenswert?

Wie wäre es mit Programm und Schaltung.
So kann man nichts oder auch sehr viel sagen.

von Peter R. (pnu)


Lesenswert?

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....

von Peter (Gast)


Lesenswert?

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

von Flip B. (frickelfreak)


Lesenswert?

lies den programmierten kontrollör wieder aus und vergleiche das mit dem 
original

von Peter (Gast)


Lesenswert?

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?

von Peter R. (pnu)


Lesenswert?

>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.

von oldmax (Gast)


Lesenswert?

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

von Peter (Gast)


Lesenswert?

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?

von Stefan B. (stefan) Benutzerseite


Lesenswert?

> 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

von Peter (Gast)


Lesenswert?

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.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

>> 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.

von Peter (Gast)


Lesenswert?

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!

von Stefan B. (stefan) Benutzerseite


Lesenswert?

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.

von Peter (Gast)


Lesenswert?

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?

von Karl H. (kbuchegg)


Lesenswert?

> 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

von Peter (Gast)


Lesenswert?

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?

von Karl H. (kbuchegg)


Lesenswert?

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.

von Klaus (Gast)


Lesenswert?

@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.

von Peter (Gast)


Lesenswert?

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?

von Peter (Gast)


Angehängte Dateien:

Lesenswert?

So hier mein Schaltplan für den ersten Versuch.

von Klaus (Gast)


Lesenswert?

@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.

von Peter (Gast)


Lesenswert?

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?

von Klaus (Gast)


Lesenswert?

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.

von Klaus (Gast)


Lesenswert?

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.

von Peter (Gast)


Lesenswert?

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?

von Klaus (Gast)


Lesenswert?

@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??

von Klaus (Gast)


Lesenswert?

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??

von Peter (Gast)


Lesenswert?

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. 
:-(

von Klaus (Gast)


Lesenswert?

@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!

von Peter (Gast)


Lesenswert?

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?

von Klaus (Gast)


Lesenswert?

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.

von Peter (Gast)


Lesenswert?

aber dann dürften die ja gar nicht angehen, da Aus dominant ist, da es 
als erstes abgefragt wird.

von Klaus (Gast)


Lesenswert?

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?

von Peter (Gast)


Lesenswert?

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.

von Klaus (Gast)


Lesenswert?

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.

von Peter (Gast)


Lesenswert?

nur noch eine Pull-Down also wie auf dem Schaltplan

von Klaus (Gast)


Lesenswert?

Wiviel Kohm hat den der Pulldown ?

von Peter (Gast)


Lesenswert?

10 KOhm wie im Tutorial angegeben.

von Klaus (Gast)


Lesenswert?

@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.

von Peter (Gast)


Lesenswert?

Ja sind 4,8 Volt und Reset habe ich ja mit nem Pull-Up auch auf ein 
klares 1-Signal gelegt.

von Klaus (Gast)


Lesenswert?

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??

von Peter (Gast)


Lesenswert?

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

von Klaus (Gast)


Angehängte Dateien:

Lesenswert?

Hier noch ein kleine Video!
Ich hoffe man kann was erkennen.

von Peter (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.