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.