-
Thread
AT90USB162 PortC funktioniert nicht als Eingang
output PORTB = 0x00; // initial state: no channel is on DDRC = 0x0f; // upper nibble of PORTC as input, lower nibble as output PORTC &= 0x0f; // no pull-ups on upper nibble of PORTC uint8_t sel = 0; unsigned long cnt = 0; PORTB_SET(7); // set PB7 to 1 // Channel
Daniel schrieb im Beitrag #3667984: > DDRC = 0x0f; // upper nibble of PORTC as input, lower nibble as > output > PORTC &= 0x0f; // no pull-ups on upper nibble of PORTC Tasten ohne Pullups, wie soll das gehen? Daniel schrieb im Beitrag #3667984: > ... do the channel
-
Thread
Probleme mit Zusammenspiel von Uart-Interrupts
=0; void rs485_slave_init() { DDRC |= (1 << PC0); // PC0 als Output setzen PORTC &= ~(1 << PC0); // Max481 auf empfangen stellen _delay_us(500); // 500µs warten uint16_t ubrr = (uint16_t) ((uint32_t) F_CPU/(16UL*BAUDRATE) - 1); UBRRH = (uint8
outdata[x++]; //Datenarray in Outputbuf 3-5 schreiben } outputbuf[9]=0x03; PORTC |= (1 << PC0); // Max481 auf senden stellen cli(); UCSRB &= ~(1 << RXEN); UCSRB |= (1 << UDRIE); //Interrupt zum Senden aktivieren sei();
-
Thread
Befehl einmalig ausführen (myAVR Board Atmega8 Atmel Studio 6.2)
/delay.h> int main(void) { DDRC = 0b00000000; DDRB = 0b00100111; DDRD = 0b10000000; PORTC = 0b00111100; _delay_ms(2000); PORTB = 0b00100000; _delay_ms(1000); while(1) { if(bit_is_clear(PINC,2)) { PORTB = 0b00000100; } PORTB = 0b00000000;
-
Thread
HC-SR04 Assembler für Abstandmessung
Standardbeschaltung ([[AVR-Tutorial:_Equipment#Selbstbau]]) - HC-SR04 (Trigger an PORTB, Echo an PORTD, LCD and PORTC) - LCD (16x2, HD44780) Bug: - angezeigter Abstand konstant ca. 5mm zu wenig. Ich habe die Berechnung und Anzeige mit vorberechneten Werten geteste und es ergab den korrekten Abstand. Im Programm
-
Thread
MIDI to Voltage mit diskretem DAC
0; for(voice = 0 ;voice < NUM_VOICES ;voice++) { if(voice ==0) { PORTC |= (1<<PC5); //Generating the Reset Signal High } PORTC ^= (1<<PC4); //Generating the Clock Signal PORTC &= ~ (1<<PC5); //Generating the Reset Signal Low
>>= 1; if( gates[voice] == HIGH) { tmp |= (1 << 7); } PORTC ^= (1<<PC4); //Generating the Clock Signal //TODO //CS Octave //Octave Output //CS Note //Note Output } PORTB = tmp; //GATE
-
Thread
C18 Timer0 Initalisierung PIC18F97J60
/ PORTB initalisieren PORTB = 0X00; TRISC= 0b01011000; // PORTC initalisieren PORTC= 0b01011000; TRISD = 0x00; // PORTD initalisieren PORTD = 0x00; TRISE = 0x00; // PORTE initalisieren PORTE = 0x00;
-
Thread
Wie kann ich den Inhalt eines Arrays in einen port schreiben?
TIMER0_OVF_vect ) // Overflow Interrupt Vector { voice++; if (voice == 16) { PORTC |= (1<<PC5); //Reset High voice =0; } else { PORTC &= ~ (1<<PC5); //Reset LOW } PORTC ^= (1<<PC4); //CLK } [/c] mit [c] if (voice == 8) [/c]
TIMER0_OVF_vect ) // Overflow Interrupt Vector { voice++; if (voice == 8) { PORTC |= (1<<RESET); //Reset High voice =0; PORTC &= ~ (1<<RESET); //Reset LOW } PORTC |= (1<<CLK); PORTC &= ~(1<<CLK); } [/C]
-
Thread
ATMega644 mit 7-Segmentanzeigen
OVF_vect) //######################################################### { // Alle Segmente aus PORTC &= ~(1<<PC3); PORTC &= ~(1<<PC4); PORTC &= ~(1<<PC5); if(muxflag==0) { PORTA = num[h]; PORTC |= (1<<PC3); } if(muxflag==1) { PORTA = num[z]; PORTC |= (1<<PC4); } if(muxflag==2) { PORTA = num[e]; PORTC |= (1<<PC5); muxflag=0; } else { muxflag = muxflag + 1; } } //######################################################### /* Hauptprogramm */ int main(void) //##
-
Thread
ATtiny85 Takt setzen
brauchte ich den nur noch reinstöpseln, USBasp irgendwie ranstecken, Programm anpassen (ATmega328: auf PORTC, ATtiny85: hat nur PORTB). Die Voreinstellungen für avrdude waren schnell anzupassen, unter Hardware kann man dann ja den Zielprozessor einstellen. Habe dort ATtiny85 ausgewählt, man kann dort auch
-
Thread
Time-Interrupt beim RFM12
DDRD &=~(1<<CS_REL1); //Relais 1 vom Codeschloss //interne Pull-Up-Widerstände einschalten PORTC |= (1<<CS_REL2); //Realis 2 vom Codeschloss PORTD |= (1<<CS_REL1); //Realis 1 vom Codeschloss //Ports initiaisieren, aus LOW setzten REL_K1_OFF(); CS_EXIT_OFF(); RFM_OFF();
-
Thread
atmega8-Timer1 zu langsam
welches die Ziffern an die 7Segmentanzeigen weiter gibt. Diese sind jeweils zwischen Pin5 und Pin0 des PORTC angeschlossen und werden darüber gemultiplext. Es sind 7Segmentanzeigen mit einer CommonAnode. Zum Multiplexen nutze ich den Timer1 der mit 300Hz zwischen den einzelnen Anezigen hinunherschaltet
out_data[4] = anzeige.stunde / 10; out_data[5] = anzeige.stunde % 10; } } [/c] PORTC = stelle[s]; Hier brauchst du ganz sicher nicht ganze 8 Bits des Ports. Mach also besser eine maßgeschneiderte [[Bitmanipulation]].
-
Thread
PIC16F872 nimmt falsche Vref
Ausgang, 1=Eingang) clrf PORTA ; Ports auf definierte Pegel schalten clrf PORTB clrf PORTC bsf STATUS, RP0 ; Auf Bank 1 wechseln bcf STATUS, RP1 movlw B'11111111' ; Port A als Eingang (Messchannel, Referenzspannung) movwf TRISA movlw B'10001000' ; Port
-
Thread
ATMEGA88 BOD wird ausgelöst sobald PINC2 auf low geht
Ausgänge. Habs gegengecheckt. [c] DDRC &= ~((1<<DDC0) | (1<<DDC1) | (1<<DDC2) | (1<<DDC3)); PORTC |= (1<<PORTC0) | (1<<PORTC1) | (1<<PORTC2) | (1<<PORTC3); [/c] Das ist die Einstellung für den Port. Wenn es Ausgänge wären, dann würde das Drehencoderinterface ja auch mit ausgeschalteter BOD
(void) { DDRD |= (1<<DDD6); // LED Ausgang DDRC &= ~(1<<DDC2); // Eingang PORTC |= (1<<PORTC2); // Pullup ein while(1) { PORTD |= (1<<PORTD6); } } [/c] Mittlerweile habe ich gerausgefunden, dass offenbar die steile Flanke durch den Inkrementalgeber
-
Thread
Bei Betätigung eines Tasters Strom geben -> Atmega8
******************* ; PORTC - Port C Data Register .equ PORTC0 = 0 ; Port C Data Register bit 0 .equ PC0 = 0 ; For compatibility .equ PORTC1 = 1 ; Port C Data Register bit 1 .equ PC1 = 1 ; For compatibility .equ PORTC2 = 2 ; Port C Data Register bit 2 .equ PC2 = 2 ; For compatibility .equ PORTC3 = 3 ; Port C Data Register bit 3 .equ PC3 = 3 ; For compatibility .equ PORTC4 = 4 ; Port C Data Register
-
Thread
PIC ignoriert endlosschleife
z) //Eingänge PIN (/*Switch*/Pir, PORTB, 4); //PIN (Pir, PORTB, 5); //Ausgänge PIN (Out, PORTC, 1);//PWM Ausgang PIN (Ton, PORTC, 0); ///////////////////////////////////////////////////////////////////////////////////////////////////////////// fPortinitialisierung(void) { ANSEL = 0x00
Eingaenge*/ TRISD = 0x00; /*PORTD Ausgaenge*/ TRISC = 0x00; PORTD=0x00; PORTC=0x00; } fPWMON(void) { PR2 = 0b01111100 ; //Timer für PWM T2CON = 0b00000101 ; //Register PWM CCP1CON = 0b00001100 ; //Register PWM CCP2CON = 0b00111100 ; //Register PWM
-
Thread
PWM-Programmierung_Lüfter
start=10) { if(!(++count%100)) { pos=++pos%2; } PORTC |= (1<<PC1); if(pos) _delay_us(1900); else _delay_us(1100); PORTC &= ~(1<<PC1); _delay_ms(18); start=0; } [/c] Schonmal
... pwmLevel = 20; while( 1 ) { pwmCnt++; if( pwmCnt > pwmLevel ) PORTC |= ( 1 << PC1 ); else PORTC &= ~( 1 << PC1 ); } } [/c] durch einen anderen Wert in pwmLevel ergibt sich eine andere zeitliche Verteilung dafür, wie lange der Pin auf 1 respektive
-
Thread
Ausgangadressierung PORTC durcheinander?
Soweit so gut, allerdings lässt sich der Port C recht seltsam schalten. Schreibe ich das: [c]PORTC = 11111110;[/c] so geht die LED an PC3 an. Schreibe ich folgendes: [c]PORTC = 11111101;[/c] so geht die LED an PC1 an. Schreibe ich folgendes: [c]PORTC = 11111011;[/c] so gehen die LED´s
bzw, die Bitnummern sind natürlich die für dich geltenden Werte einzusetzen. Um also den Pin PC3 am PORTC auf 1 zu setzen [c] PORTC |= ( 1 << PC3 ); [/c] [[Bitmanipulation]]
-
Thread
Variablenübergabe bei _delay_ms
arbeiten. Mögliche Lösung: [c]void Ebenen_ansteuern(unsigned char ebenen, unsigned char dauer) { PORTC=ebenen; while(dauer--) _delay_ms(1); } [/c]
Noch ne Möglichkeit: Makro (etwa so): [c] #define Ebenen_ansteuern(ebenen, dauer)\ do{\ PORTC = ebenen;\ _delay_ms(dauer);}\ while(0) [/c]
-
Thread
AVR Attmega8a Routinenaufruf fumktioniert nicht (asm)
LCD4ZTxt ldi YH,HIGH(RH_2) ldi YL,LOW(RH_2) ldi r16,0b00000101 out DDRC,r16 out PORTC,r16 ldi DHTmaske,0x04 ldi arg,0x46 rcall LCD_pos rcall DHT_lesen rcall wait2s ldi DHTmaske,0x01 ; out DDRC,DHTmaske ; out PORTC,DHTmaske ldi YH,HIGH(RH_H)
[/avrasm] ist es nicht gesetzt. Hier [avrasm] ldi r16,0b00000101 out DDRC,r16 out PORTC,r16 [/avrasm] aber schon.
-
Thread
Problem beim abfragen von 2 DHT22
SPL, r16 ldi r16, HIGH(RAMEND) out SPH, r16 ldi r16,0b00000101 out DDRC,r16 out PORTC,r16 .def temp = r16 .def temp2 = r20 .def temp3 = r21 .def DHTmaske = r22 .equ LCD_PORT = PORTD .equ LCD_DDR = DDRD .equ LCDS_PORT = PORTD .equ LCDS_DDR = DDRD .equ LCD_RS
rcall DHT_lesen rcall wait2s ldi DHTmaske,0x04 ; out DDRC,DHTmaske ; out PORTC,DHTmaske ldi YH,HIGH(RH_H) ldi YL,LOW(RH_H) ldi arg,0x1a rcall LCD_pos rcall DHT_lesen ; ldi temp,1 ; rcall waitMs ; mov arg,byte ; rcall LCD_number
-
Thread
Atmega8 hängt nach Interrupt
Guten Abend :) Dieses mal habe ich ein Problem mit meinem Programm für den Atmega8. Wenn PortC >= 11 ist und der Interrupt ausgelöst wird, hängt sich das Programm auf und reagiert nicht auf interrupts. Ich bitte euch mir weiterzuhelfen :) LG [c]uint8_t segcodeB[11]; bool segcodeD[11];
1<<PD7); DDRB &=~(1<<PB0)|(1<<PB1)|(1<<PB2)|(1<<PB3)|(1<<PB4)|(1<<PB5); PORTD|=(1<<PD2); PORTC |=(1<<PC0)|(1<<PC1)|(1<<PC2)|(1<<PC3); MCUCR=0b00000011; GICR=0b01000000; sei(); while(1) { if (triggermove) { darstellzahl[0]=darstellzahl[1]; darstellzahl
-
Thread
Binärcode wird nicht richtig erkannt
ansteuerbar machen DDRB &=~(1<<PB0)|(1<<PB1)|(1<<PB2)|(1<<PB3)|(1<<PB4)|(1<<PB5); PORTD|=(1<<PD2); PORTC |=(1<<PC0)|(1<<PC1)|(1<<PC2)|(1<<PC3); MCUCR=0b00000011; GICR=0b01000000; sei(); while(1) { temp = PINC; if (temp<10) { PORTD=(1<<PD3)|(segcodeD[temp]<<PD7);
-
Thread
LED Cube programmieren
{ DDRC=0b0011111; //Port C Ausgänge: 0,1,2,3,4 while(1) { PORTC=0b0000001; _delay_ms(30); PORTC=0b0000011; _delay_ms(30); PORTC=0b0000111; _delay_ms(30); PORTC=0b0001111; _delay_ms(30); PORTC=0b0011111; _delay_ms
SPI_transfer(0b10101010); PORTB=0b0001000; //LATCH On-Off PORTB=0b0000000; PORTC=0b0000001; // Ebene 1-5 Werden angesteuert. _delay_ms(timeperiod); PORTC=0b0000010; _delay_ms(timeperiod); PORTC=0b0000100; _delay_ms(timeperiod); PORTC=0b0001000
-
Thread
Poti Auslesen und in Terminal anzeigen
char Buffer[10]; uart_init(F_CPU, BAUD); DDRC &= ~(1<<PC0); /* Pin PC0 als Eingang */ //PORTC |= (1<<PC0); /* internen Pull-Up an PC0 aktivieren */ PORTC = 0; ADC_Init(); // Initialisierung Analogeingang while(1) { result = ADC_Read(0); utoa( result, Buffer
char Buffer[20]; uart_init(F_CPU, BAUD); DDRC &= ~(1<<PC0); /* Pin PC0 als Eingang */ //PORTC |= (1<<PC0); /* internen Pull-Up an PC0 aktivieren */ PORTC = 0; ADC_Init(); // Initialisierung Analogeingang put2s( "ADC Messung: PC0\n" ); while(1) { result = ADC_Read
-
Thread
2 Stellige 7 Segment Anzeige
; count--) { tempdigit=temp % 10; PORTD &= ~(digit[count]); // select digit PORTC |= (lightup[tempdigit] & numbitmaska); PORTD |= (lightup[tempdigit] & numbitmaskd); if (!(showyear) & !(showdate) & !(showvcc) & !(showtemp) & (count==1) & toggle) PORTD |= 0x80; /
// set dot if (showtemp & (count==1)) PORTD |= 0x80; // set dot temp /= 10; PORTC &= ~(numbitmaska); // Set all pins A0-A5 HIGH PORTD &= ~(numbitmaskd); // Set D2-D5 and D6+D7 HIGH PORTD |= digbitmask; // deselect digit }[/c] Die Schleife musst du auf zwei Durchläufe
-
Thread
Problem mit einer kleinen Software
Config Pinb.2 = Output Config Pinb.1 = Output Config Portd.6 = Output Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5 'Display Parameter Config Lcd = 20 * 4 'config LCD Cursor Off Config
-
Thread
Wer verwendet RFM69?
Auf einem zweiten Modul läuft [c]if (rfm_receiving()) { PORTC |= (1<<PIN0); // AN rfm_receive(array, &rx_length); tx_length = rx_length; rfm_transmit(array, tx_length); rfm_rxon(); PORTC &= ~(1<<PIN0); // AUS }[/c