Programm auf ATmega8 übertragen

Gast #1942235
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
#1942421
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....
#1942811
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.
Gast #1942888
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
Gast #1943171
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?
Gast #1943314
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.
Gast #1943512
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!
Persönliche Seite #1943554
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.
Gast #1943700
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?
#1943848
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
Gast #1943868
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?
Gast #1944064
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.
Gast #1944217
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?
Gast #1944477
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.
Gast #1944614
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?
Gast #1945176
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?
Gast #1945326
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??
Gast #1945345
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??
Gast #1945355
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. 
:-(
Gast #1945360
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!
Gast #1945362
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.
Gast #1945377
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?
Gast #1945380
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.
Gast #1945388
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.
Gast #1945428
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.
Gast #1945551
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??
Gast #1946182
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren