Hallo, brauche mal wieder die Profis!
Frage:
Wenn ich bei Mega 8 den Portb als INPUT definiere und die PULLUP’s auf HIGH setzte und den Portc auf Ausgang und ich anschließend die Pin’s b0-b4 auf Masse ziehe weil ich zB: Kontakte überwachen möchte, wann sie geöffnet sind, so kann ich den µP über meinen ISP STK 300 nicht mehr programmieren bzw. darauf zugreifen.
Nehme ich die Masse der Pin’s b0-b4 wieder weg, so funktioniert es wieder.
Woran liegt das?
Code:
.include "m8def.inc"
.def temp = r16
ldi r16, 0b00000000
out DDRB, r16
ldi temp, 0b11111111
out PORTB,temp
ldi r16, 0b11111111
out DDRC, r16
main:
in r16,PINB ;lies die Bitkomb. von Portb ein
andi r16,0b00011111 ;wenn kein Klappe offen,Schalter geschl.--> auf Masse gezogen
breq main ;zB:Portb hat 11100000 AND 00011111=00000000--> jump mainl
ldi r16,0b00000010 ;lade die Bitkomb. 00000001 ins Register R16
out portc,r16 ;Ausgabe auf Portc die Bitkomb. des Registers R16
teste_S5:sbic PINB,5 ;wenn Bit 5 auf Portb 0 (Z=1) ist überspringe nächsten Bef.
rjmp teste_S5 ;springe zu Label teste_S5
ldi r16,0b00000000 ;lade die Bitkomb. 00000000 ins Register R16
out portc,r16 ;Ausgabe auf Portc die Bitkomb. des Registers R16
rjmp main
Code-Tags spendiert vom Mod
Dieses Programm bewirkt folgendes:
Ich möchte 5 Klappen (Port b0-b4) überwachen. Wird eine der insges. 5 ausgelöst (Bin auf Masse), sollte die Lampe angehen.
Wird jedoch S5 geschalten (b5 auf Masse) so wird die Lampe unterdrückt (Pin Portc 2 = 0)
Leider funktioniert das nicht so hundertprozentig! Portc Pin 2 zieht nicht richtig auf Masse, wenn ich den S5 drücke sollte die Led (low current Rv 1k2) am Testboard nicht leuchten. Tut sie aber (1,8V anstelle 0V)
War immer der Meinung, wenn ich den Ausgang auf 0 setze, dann ist dieser auf Masse und nicht irgendwo! Und umgehrt natürlich auch. Was mache ich falsch?
Danke Papua
Lesezeichen