in // PC3 = nicht da - in // PC2 = nicht da - in // PC1 = nicht da - in // PC0 = nicht da - in // PORTC pullup enable fuer Eingänge: kein PC0,PC1,PC2,PC3,PC4,PC5 PORTC = (1<<PC7) | (1<<PC6); // PortC Daten Register: Enable pullup // damit sind bei PortC-Input-Pins die pullups aktiv // unbeschaltete Input-Pins
CCP2MX = PORTBE ich hab doch gesagt, alter mist ... wann lernst du endlich LESEN?! CCP2MX = PORTC/PORTB
finde ich nicht die richtigen Stellen. Sag mir doch mal bitte, wo ich die Information "CCP2MX = PORTC/PORTB" finden kann. Im Datenblatt finde ich es auch nicht.
_delay_ms(1000); PORTC &= ~(1 << PC5); _delay_ms(250); PORTC ^= (1 << PC5); // flip state of LED on PC5 _delay_ms(1000); PORTC &= ~(1 << PC5); _delay_ms(250); PORTC ^= (1 << PC5); // flip state of LED on PC5
_delay_ms(1000); PORTC &= ~(1 << PC5); _delay_ms(250); PORTC ^= (1 << PC5); // flip state of LED on PC5 _delay_ms(1000); PORTC &= ~(1 << PC5); _delay_ms(250); PORTC ^= (1 << PC5); // flip state of LED on PC5
avrasm] .include "m328Pdef.inc" ldi r16,$FF sts PRR,r16 out PORTB,r16 out PORTC,r16 out PORTD,r16 nop main_loop: rjmp main_loop [/avrasm] Mit dem /nop/ fließen 2.16, ohne 1.94 mA.
> sts PRR0,r16 > sts PRR1,r16 > out PORTA,r16 > out PORTB,r16 > out PORTC,r16 > out PORTD,r16 > rjmp main > [/avrasm] > > Mit zweimal /nop/ fließen 3.81, mit einem 3.38 mA. > Soll natürlich heißen, bei mir; und da hätte mich interessiert, welche > Ströme
} } } void allLEDoff(void) { PORTA = 0x00; /* LED's an Port A ausschalten */ PORTC = 0x00; /* LED's an Port C ausschalten */ } /* Initialisiert den Timer 1 fuer einen Sekundentakt */ void initTimer0(void) { PIE1bits.TMR1IE = 0; /* Timer Interrupt aus */ T1CONbits.TMR1ON
falschen Routine verfallen. Wollte nur mal ein WE Miniprojekt machen. (L-Meter) Display ist an PORTC und an T0 ist ein anderer Oszillator (zum Induktivität ermitteln). Diesen habe ich aber Stillgelegt, um dort einen Fehler auszuschließen. Mit dem Oszi messe ich zwischen GND und XTAL1...nix. Und
code here, to run repeatedly: delay(100); //Serial.println("An"); digitalWrite(PC1,1); //PORTC |= 0x02; delay(100); //Serial.println("Aus"); digitalWrite(PC1,0); //PORTC &= ~0x02; } Pin 24 wackelt nur, wenn ich die im obigen Beispiel auskommentierten Zeilen aktiviere. Es
main: cpi temp5,5 ; 5 Sekunden breq led_stat rjmp main led_stat: sbis PINC,0 sbi PORTC,0 sbic PINC,0 cbi PORTC,0 ldi temp5,0 ; Wieder auf 0 und von vorne... rjmp main [/c] Momentan lasse ich damit noch ein LED blinken, damit ich mit dem Oszi den Zeitabstand messen
was erscheint auf der Anzeige mit so einem Programmschnipsel:ldi r17, > 0b00110000; > out Port portc,r17; Nix. Auf deinem Monitor allerdings: error: PORTC: Unknown instruction or macro
nur PORTC. Hoffentlich ist das Elend bald zu Ende.
Kann man bei den AVR-Mikrocontrollern PORTC |= xx, PORTC &= xx und PINC = xxx (Toggle) schreiben, wenn Interrupt-Code im Programm ist, der gleichzeitig andere Bits in PORTC ändert? Es ginge nicht, wenn dieser C-Befehle zu zwei Befehlen führen
Gerd schrieb im Beitrag #5862714: > PORTC |= xx, PORTC &= xx Wie soll das bitte funktionieren ohne den Port vorher zu lesen? Atomar wäre nur PORTC = xx.
leo schrieb im Beitrag #5853505: > DDRC &= ~(1<<PORTC2) | (1<<PORTC3) | (1<<PORTC4) | (1<<PORTC5); Unabhängig vom Flasherproblem: Soll wirklich nur PC2 ein Eingang und PC3 bis PC5 Ausgänge sein ?
Ralph S. schrieb im Beitrag #5853649: >> DDRC &= ~(1<<PORTC2) | (1<<PORTC3) | (1<<PORTC4) | (1<<PORTC5); Ich verbessere mich: PC2 als einziger Pin ist Eingang, alle anderen des PortC sind nach dieser Angabe Ausgänge ! ~(1 << PORTC2) => ~(0000.0010
Ich würde mich über eure Hilfe freuen. Das einzige was ich mir vorstellen kann, ist, dass der PORTC irgendwie dadurch beeinflusst wird, dass ich Pin 0 und 1 für SCL und SDA benutzte? Aber warum? Ansonsten stehe ich echt auf dem Schlauch. Beste Grüße.
Thomas schrieb im Beitrag #5846133: > PORTC = 0x1111100; Da gehört ein "b" hin, nicht "x". Außerdem fehlt bei beiden Anweisungen eine 1 für das höchste Bit (PC7). Ansonsten würde ich auch auf die JTAG Fuses tippen, an denen liegt es fast
int main(void) { DDRB = 0xFF; //Register B Ausgänge DDRC = 0x00; // Register C Eingänge PORTC = 0xFF; // Register C Pullups ein while (1) { if (!(PINC & ( 1<<PC4 ))) //wenn PC4 HIGH dann... { PINB |= ( 1<<PB0 ); // LED an PB0 an } else { PINB
main(void) { DDRB = 0xFF; // Register B Ausgänge DDRC = 0x00; // Register C Eingänge PORTC = 0xFF; // Register C Pullups ein while (1) { if ((PINC & ( 1<<PC4 ))) //wenn PC4 High dann... { PORTB |= ( 1<<PB0 ); // LED an PB0 an } else { PINB
zugehörige Pin LOW ausgibt, geht die LED an. Da du das Port-Register nicht angefasst hast, ist PORTC komplett auf 0x00. Damit ist Pin C1 auf Ausgang (DDRC = 0x01) und gibt LOW (sprich, annähernd 0V) aus. Bei PORTC = 0x01 geht der Pin auf HIGH (nahezu 5 V) und die LED geht aus.
PORTD3 // 74HC595.12 (RCK) #define ACT_INDICATOR_OE PORTD2 // 74HC595.13 (^OE) #define RX_SENSE_PORT PORTC #define RX_SENSE_DDR DDRC #define RX_SENSE_PIN PINC #define RX_SENSE_INPUT PORTC4 // Sense Leitung an INPUT-RX #define RX_SENSE_OUT4 PORTC3 // Sense Leitung an OUTPUT4-RX #define RX_SENSE_OUT3 PORTC2 // Sense Leitung an OUTPUT3-RX #define RX_SENSE_OUT2 PORTC1 // Sense Leitung an OUTPUT2-RX #define RX_SENSE_OUT1 PORTC0 // Sense Leitung an OUTPUT1-RX // enthält die Anzahl der Blink-Zyklen, die je LED noch auszugeben sind. // Die Pin-Change ISR setzt bei
ich habe ein Problem mit meinem externen interrupt am Atxmega16D4. Ich habe folgenden Code: [c] PORTC.INTCTRL |= 0x03; PORTC.INT0MASK |= PIN0_bm; PORTC.PIN0CTRL |= PORT_ISC_RISING_gc; PMIC.CTRL |= PMIC_HILVLEN_bm; SREG |= 0x80; sei(); ISR(PORTC_INT0
am Ende der ISR die > Interrupt Flags löschst, indem du eine 1 an die Bitposition schreibst: > PORTC.INTFLAGS = INT0IF_bm; Dies hat scheinbar wunderbar funktioniert. Danke an alle.
umgesetzt. Wahrscheinlich dachte ich, dass die PINs schon belegt waren. Jetzt wo alles an PortD, statt PortC klemmt funktioniert's :) Ich danke euch für die zahlreiche Hilfe und entschuldige mich zugleich, falls ich dem ein oder anderem ein paar Nerven geraubt haben sollte.