Hallo Ich benutz als Controller den ATMega 16-16PU. Der ganze Port A ist als Eingang konfiguriert und funktioniert auch einwandfrei. Die Pins von PortC sind auch Eingänge allerdings funktionieren nur die Pin 0 und 1. Bei Pin2 geschieht nichts. Ich brauche von PortC nur die ersten 3 Pins. Ich hab noch anstatt Pin2 Pin3 versucht aber der hat auch nicht funktioniert. Muss man bei den Pins irgendetwas aktivieren oder Deaktivieren damit ich sie als Eingänge verwenden kann?
Aus dem Datenblatt: • TMS – Port C, Bit 3 TMS, JTAG Test Mode Select: This pin is used for navigating through the TAP-controller state machine. When the JTAG interface is enabled, this pin can not be used as an I/O pin. • TCK – Port C, Bit 2 TCK, JTAG Test Clock: JTAG operation is synchronous to TCK. When the JTAG interface is enabled, this pin can not be used as an I/O pin. Musst also JTAG ausschalten...
Ich lese den Wert den an PortA und die ersten 3 von PortC ein und
erzeuge damit ein PWM Signal. Sobald der 3 te Pin von PortC logisch 1
ist sollte der PWM Ausgang abschalten und der Controller ist in einer
endlosschleife gefangen. (ganz unten)
; Programm:PWM Signal mit 10Bit Eingang
.nolist
.include "m16def.inc" ;Include Datei
.list
.org 0x000
rjmp init ; Falls Reset
.org 0x008
rjmp T2_OVF ;Timer2 Over Flow
.org 0x00C
rjmp T1_CMPA ;Timer 1 CMP A
.org 0x00E
rjmp T1_CMPB ;Timer 1 CMPB
;Register Definition
.def temp=r16
.def spswertl=r17
.def spswerth=r18
.def startwertl=r19
.def startwerth=r20
.def ausgang = r24
init:
ldi temp, HIGH(RAMEND)
out SPH, temp ; High s-ram Stapel (16bit)
ldi temp, LOW(RAMEND) ; LOW s-ram Stapel(8bit)
out SPL, temp
ldi ausgang,0
ldi temp,0
ldi spswertl,0
ldi spswerth,0
ldi startwertl,0
ldi startwerth,0 ;Alle register auf 0
ldi temp,255
out ddrb,temp ;PortB= ausgänge
ldi temp,0
out ddra,temp
ldi temp,0
out ddrc,temp
ldi temp,4
ldi startwertl,0
out OCR1BH,temp ;Pulslänge
out OCR1BL,startwertl
ldi spswertl,50
ldi spswerth,0
out OCR1AL,spswertl ;Pulsbreite
out OCR1AH,spswerth
ldi temp,0b01011000 ;Innterrupt CMPB CMPA Timer1 erlauben und
timer 2 overflow
out timsk,temp
ldi temp,0b00000010 ;Setze Prescaller 1 Timer1
out TCCR1B,temp ;Starte Timer1
ldi temp,0b00000101 ;Setze Prescaler 1024 Timer2
out tccr2,temp
sei
main:
rjmp main ;Leere schleife
T1_CMPA: ;Schalte PWM aus
andi ausgang,0b11111110
out portb,ausgang
reti
T1_CMPB: ;Schalte PWM ein
ori ausgang,0b00000001 ;setze PWM ausgang auf 1
out portb,ausgang
ldi temp,0
out TCNT1H,temp ;Setze Timer1 auf 0
out TCNT1L,temp
reti
T2_OVF:
in spswertl,pina
in spswerth,pinc
andi spswerth,0b00000111
out OCR1AH,spswerth
out OCR1AL,spswertl
in temp,pinc
andi temp,0b00000100
cpi temp,0b00000100
breq fehler
reti
fehler: ;Prüfe ob PinC2 überhaupt als eingang angenommen wird
ldi temp,0
out portb,temp
rjmp fehler
Oh okey danke. Und wo kann ich das ausschalten? Bei den Fuses ? Ich schau gleich mal nach villeicht finde ich es auch selbst raus. Aber schonmal viellen Dank
Oke bei den Fuses hats ein hacken bei Jtagen. Dann kann ich den einfach entfernen und immer noch Programme rein laden oder ? Hab immer ein bisschen respekt vor den fuses.^^
Besorg dir nen HV-Programmer, und du brauchst dir keine Sorgen mehr bei den Fuse machen ;-) naja von der Reset-Fuse würde ich pers. die Finger lassen, aber sonst so?- Alles eigentlich mit einfachen Mittel rettbar
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.