DS1621_Read); Temp = I2C_Read_Data(); I2C_NACK(); I2C_Stop(); peripherie_NoI2C(); peripherie_LED(); PORTC = Temp; for(unsigned long z = 0; z <= 100000; z++){NOP();} if(ACK) { PORTC = 0x0F; for(unsigned long z = 0; z <= 4000; z++){NOP();} PORTC = 0x00; for(unsigned long z = 0; z <= 2000; z++){NOP();} PORTC = 0x0F; for(unsigned long z = 0; z <= 4000; z++){NOP();} PORTC = 0x00; for(unsigned long z = 0; z <= 2000; z++){NOP();} ACK = 0; } else { PORTC = 0xF0; for(unsigned long z = 0; z <= 4000; z++){NOP();} PORTC = 0x00; for(unsigned long z = 0; z <= 2000; z++){NOP(
pullup, mit dem Multimeter auf AC reinzumessen und mir > die Spannung sagen? Das Teil hängt am PORTC eines Atmega168. Der hat normal nur 6 Pins, die alle vom Display belegt werden. Ich habe aber mal den Resetpin abgeschaltet und den als Input High geschaltet. 5V ohne Wackler. dirk h. schrieb im
durch eine For schleife, solange du mit dem XC8 arbeitest. Im Anhang ein Bild von der Anzeige des PORTC direkt nach dem Ausführen der Zeile SDA=1; Man sieht, RC4 ändert seinen Zustand.
For schleife, solange du mit dem XC8 > arbeitest. > > Im Anhang ein Bild von der Anzeige des PORTC direkt nach dem Ausführen > der Zeile SDA=1; > Man sieht, RC4 ändert seinen Zustand. Hm bei mir geht er nicht mehr aus... werd mal mit dem Osci paar PINs testen mfg J. Bier
PINB Read/Write R R R R R R R R Initial Value N/A N/A N/A N/A N/A N/A N/A N/A Port C Data Register – PORTC Bit 7 6 5 4 3 2 1 0 PORTC7 PORTC6 PORTC5 PORTC4 PORTC3 PORTC2 PORTC1 PORTC0 PORTC Read/Write R/W R/W R/W R/W R/W R/W R/W R/W Initial Value 0 0 0 0 0 0 0 0 Port C Data Direction Register – DDRC Bit
Stück code: [c] test = result; //ist beides uint16_t if(test*1000 > test*100) { PORTC |= (1<<PORTC5); //LED an } else { PORTC &= ~(1<<PORTC5); //LED aus } [/c] jetzt sollte die LED immer leuchten, oder? Nun, das tut sie aber nicht immer: wenn die Variable "test"
weil mein eigentlicher code so aussieht: [c] if(var1 + var2 + var3*20000 > var4*1000) { PORTC |= (1<<PORTC5); //LED an } else { PORTC &= ~(1<<PORTC5); //LED aus } [/c] Die Multiplikation braucht es bei meinem Programm. Da ich aber nicht verstanden habe, wieso es bei grossen
PORTD // Port für PWM #define PWM_DDR_1 DDRD // Datenrichtungsregister für PWM #define PWM_PORT_2 PORTC // Port für PWM #define PWM_DDR_2 DDRC // Datenrichtungsregister für PWM #define PWM_CHANNELS 11 // Anzahl der PWM-Kanäle // ab hier nichts ändern, wird alles berechnet #define T_PWM (F_CPU/(PWM_PRESCALER
#define PWM_DDR_1 DDRD // Datenrichtungsregister für PWM #define PWM_PORT_2 PORTC // Port für PWM #define PWM_DDR_2 DDRC // Datenrichtungsregister für PWM #define PWM_CHANNELS 11 // Anzahl der PWM-Kanäle // ab hier nichts ändern
while(adc_MITTEL(0 , 100) > 1020) //Abfrage ob immer noch Druck { PORTC = pumpe; b = 0; } PORTC = 0x00; b++; } uart_WRITEC("Spuelen\n\r"); PORTC |= (1 << DDC4); //Spülvorgang _delay_ms(100); // Einstellen der Spüldauer PORTC &= ~(1 << PC4); } } [/c] Es ist quasi so, dass durch den Druck am ADC erst eine Pumpe1 ausgelöst wird und nach einer gewissen Zeit, *fett* wenn der Benutzer nicht nochmal den Sensor aktiviert
und folgendes im Programm hinzugefügt: im Header: #define DCF77_PON PC6 im Hauptprogramm: PORTC |= (1<<DCF77_PON); PORTC &= ~(1<<DCF77_PON); damit gebe ich ihm doch eine fallende Flanke - oder? Ich habe diese Schaltung in einem Forum gefunden von jemandem mit einem ähnlichen Problem wie
serial port pins return ;******************* ; Init of Ports * ;******************* Init_Ports bcf PORTC,3 ; Init_switches movlw b'00001111' movwf TRISD ; Init RD0-3 as Inputs ; Init as digital Inputs, INT is defined as Input by standartconfiguration (PORTB,RB0) movlw b'00001111' movwf ADCON1 ; Define
Output for Timer0 DDRB |= _BV(PINB3); // Now enable global interrupts sei(); // Pin A0-A7 are on PORTC. // Pins D8-D13 are on PORTB. // Pins D0-D7 on PORTD. PORTC |= numbitmaska; // Set all pins A0-A5 HIGH DDRC |= numbitmaska; // Set all Pins A0-A5 as OUTPUT PORTD |= ((digbitmask) | (numbitmaskd));
#define DELAY 5000 // Einschalt/Ausschaltdelay für Audiogeräte #define LED_PORT PORTC // Port an dem LEDS liegen #define LED1 (1<<PC2) // LED 1 Ein/Aus System #define LED2 (1<<PC4) // LED 2 EIN/AUS Audio #define LED3 (1<<PC5) // LED 3 EIN/AUS
include <avr/interrupt.h> #include "header.h" #include "uart.h" // Defines: #define LED_PORT PORTC // Port an dem LEDS liegen #define LED1 (1<<PC2) // LED 1 Ein/Aus System #define LED2 (1<<PC4) // LED 2 EIN/AUS Audio #define LED3 (1<<PC5) // LED 3 EIN/AUS
Tach Gemeinde, Folgende Frage zu den internen Pull-Up's: Habe diese via [code] DDRC = 0x00; PORTC = 0b00111111; [/code] aktiviert. An den 6 Pins hängen momentan Drähtchen, die ich bei Bedarf auf Masse halte um mein Programm zu testen. Was ja nichts anderes ist, als wenn die in einem Taster angeklemmt
PORTC = 0b00111111; Schau mal ob dein Compiler nicht doch Probleme mit dem 0b.. hat und gib mal direkt in Hex oder Dezimal den Wert vor. Schnapp dir mal nen 47k Widerstand und zieh darüber den Pin
zu deaktivieren. Funktioniert der Code wie er sollte, wenn du die Zeilen weglässt?? > BTFSS PORTC,4 > GOTO $-2 > BSF LATB,4 Hast du mal die Spannung an den einzelnen PINs gemessen? Versuch mal als Test diese Schleife, vllt. findest du was Interessantes heraus. [avrasm] Marke: movff PORTC,LATB goto Marke [/avrasm] P.S. Ich würde mir angewöhnen Labels wie z.B. "Marke" mit Doppelpunkt am Ende zu schreiben. MPASM ist es egal ob er da ist oder nicht, bei vielen anderen Assemblern
benutze ich das Optimierungslevel "Os". Weitere Angleichung waren die Ports, da ich für die Taster PortC und für die LEDs PortD in Benutzung habe. Damit sieht es bei mir nun so aus: [c] #include <avr/io.h> #include <stdint.h> #include <avr/interrupt.h> #define F_CPU 8000000UL #include <util/delay.h> #define KEY_DDR DDRC #define KEY_PORT PORTC #define KEY_PIN PINC #define KEY0 0 #define KEY1 1 #define KEY2 2 #define ALL_KEYS (1<<KEY0 | 1<<KEY1 | 1<<KEY2) #define REPEAT_MASK (1<<
;Taster 1 liegt an Pin RA4 #define TASTER_2 PORTA, 5 ;Taster 2 liegt an Pin RA5 #define TASTER_3 PORTC, 0 ;Taster 3 liegt an Pin RC0 #define TASTER_4 PORTC, 1 ;Taster 4 liegt an Pin RC1 ;=========================== ; VARIABLEN ;=========================== w_temp EQU 0x70 ; werden für Interrupts verwendet
Hallo, versuch mal den PORTC_OUTSET = PIN7_bm; PORTC_DIRSET = PIN7_bm; als Ausgang zu schalten Gruß G.G.
funktioniert nicht. Das Signal bleibt auf PC3 (wo es nicht bleiben soll). Laut Debugger wird das PORTC_REMAP-Register gar nicht beschrieben. Hat jemand vielleicht einen Tipp für mich? Hier mein Code: [c] //Remap TC0D from PC3 to PC7 PORTC_DIRSET = 1<<PIN7_bp; PORTC_REMAP = 1<<3;
io.h> #define F_CPU 1000000 #include <util/delay.h> int main (void){ DDRC=0xFF; while(1){ PORTC = 0b00000001; _delay_ms(500); PORTC = 0b00000010; _delay_ms(500); PORTC = 0b00000100; _delay_ms(500); PORTC = 0b00001000; _delay_ms(500); } } [/c] wenn ich den Mikrokontroller einschalte
Hi >PORTC = 0b00000001; >_delay_ms(500); >PORTC = 0b00000010; >_delay_ms(500); >PORTC = 0b00000100; >_delay_ms(500); >PORTC = 0b00001000; >_delay_ms(500); Sieht etwas merkwürdig aus. Wenn das ein unipolarer
Getadc(0) Compare1a = Wert Locate 1 , 1 Lcd ; Wert Waitms 10 Cls If Wert < 600 Then Portc.5 = 1 Elseif Wert > 700 Then Portc.4 = 1 Else Portc.5 = 0 Portc.4 = 0 End If Loop End [/code] wo liegt der Fehler? ich such jetzt schon 3 Stunden nach dem Problem und finde nichts .