-
Thread
Dimmer flackert trotz Timer Interrupt
diese Routine z.B hat "nur" Schleifen und Stört: [c] void Eingaenge_abfragen (void) { PORTC |= (1<<PC4); // Mit PL alle Eingänge in das Register schieben. // PL auf High PORTC |= (1<<PC5); // PL auf Low PORTC &= ~(1<<PC5); // PL auf High PORTC |= (1<
} // Mit Clock weiterschieben // Clock auf High PORTC |= (1<<PC4); // Clock auf Low PORTC &= ~(1<<PC4); // Clock auf High PORTC |= (1<<PC4); } } [/c]
-
Thread
3x LED-PWM-Faden
LEDs pro Reihe mit 256 Helligkeitsstufen nur folgendes machen muss PORTA=red0; PORTB=blue0; PORTC=green0; PORTD=1; delay(1); PORTA=red1; PORTB=blue1; PORTC=green1; PORTD=2; delay(2); PORTA=red2; PORTB=blue2; PORTC=green2; PORTD=4; delay(4); PORTA=red3; PORTB=blue3; PORTC=green3; PORTD=8; delay(8); PORTA=red4; PORTB=blue4; PORTC=green4; PORTD=16; delay(16); PORTA=red5; PORTB=blue5; PORTC=green5; PORTD=32; delay(32); PORTA=red6; PORTB=blue6; PORTC=green6; PORTD=64; delay(64); PORTA=red7; PORTB=blue7; PORTC=green7
-
Thread
#define ports
Geschichte".... :) Folgendes: ..ich gebe den Ausgängen des Ports C Namen => #define LED0_ON PORTC |= (1<<PC0); #define LED0_OFF PORTC &= ~(1<<PC0); #define LED1_ON PORTC |= (1<<PC1); #define LED1_OFF PORTC &= ~(1<<PC1); #define LED2_ON PORTC |= (1<<PC2); #define LED2_OFF PORTC &= ~(1<<PC2); #define LED3_ON PORTC |= (1<<PC3); #define LED3_OFF PORTC &= ~(1<<PC3); #define LED4_ON PORTC |= (1<<PC4); #define LED4_OFF PORTC &= ~(1<<PC4); Somit verwende ich im Programm nur das LED1_ON zB. Frage : wie mache
-
Thread
MikrocontrollerProgramm->problem mit If-Befehlen
meines Problems freuen :) Mfg Dani $regfile = "m32def.dat" $crystal = 1000000 Config Portc.1 = Output Config Portc.2 = Output Config Portc.3 = Output Config Portc.4 = Output Config Portc.5 = Output Config Portc.6 = Output Config Portc.7 = Output Config Portd.0 = Output Config Pina
Portc.3 = 1 Portc.4 = 0 Waitms Zeit Portc.1 = 1 Portc.2 = 0 End If If Pina.7 = 1 Then Waitms La Portc.5 = 0
-
Thread
Disasembliertes Hex-File in C nachprogrammieren
nicht richtig verstehe. [c] cbi ADMUX, MUX0; 0000048C; Lösche Bit MUX0 im PortRegister ADMUX cbi PORTC, PORTC2; 0000048E; Lösche Bit PORTC2 im PortRegister PORTC cbi PORTC, PORTC5; 00000490; Lösche Bit PORTC5 im PortRegister PORTC lds r17, OnInterval; 00000492 10 91 rjmp Label_049C; 00000496
1 and r16, r16; 000004A0 00 23 brne Label_0498; 000004A2 D1 F7 sbi PORTC, PORTC5; 000004A4; Setze Bit PORTC5 im PortRegister PORTC [/c] Was passiert in den Zeilen 492 - 4A2 ? Das kann doch nur eine Zeitschleife sein ? Aber der Footprint eines _delays_us() sieht in
-
Thread
Eingänge PORTC Probleme beim Atmega8
ende. weiß nich woran das liegt. ich habe eine tastatur(0 bis 9 und Stern und Raute) an PortB und PortC angeschlossen. PortB und PortC jeweils 6 Pins, also passt. nun aber das problem. die letzten 3 Pins also vom PortC kann ich nicht ansprechen! siehe programmcode... PortB klappt alles perfekt aber bei PortC klappt das mit der 9, Stern und Rautetaste nicht. Hat jemand eine Idee? wäre sehr dankbar switch(port_b) { case 0xFE: pw_org[counter]='0'; counter++; break; case 0xFD: pw_org[counter]='1'
-
Thread
Probleme mit 74HC273 als Porterweiterung
Der Code: [c] #include <avr/io.h> #include <avr/delay.h> #define LED0 PORTC |= (1 << PC5) #define LED1 PORTC |= (1 << PC4) #define LED2 PORTC |= (1 << PC3) #define LED3 PORTC |= (1 << PC2) #define LED4 PORTC |= (1 << PC1) #define LED5 PORTC |= (1 << PC0) #define LED6 PORTD |= (1 << PD5) #define LED7 PORTD |= (1 << PD4) #define LED8 PORTC |= (1 << PC5) #define LED9 PORTC |= (1 << PC4) #define LED10 PORTC |= (1 << PC3) #define LED11 PORTC |= (1 << PC2) #define LED12 PORTC |= (1 << PC1) #define LED13 PORTC |= (1 << PC0) #define
-
Thread
Touch Taster
'C4 low? Ddrc.5 = 0 'C5 hochohmig Portc.5 = 0 'ohne Pullup Ddrc.4 = 1 Next Da 'C4 low 'Loop Portc.4 = 0 Portc.5 = 0 Ddrc.4 =
'C4 low? Ddrc.1 = 0 'C5 hochohmig Portc.1 = 0 'ohne Pullup Ddrc.0 = 1 Next Db 'C4 low 'Loop Portc.0 = 0 Portc.1 = 0 Ddrc.0 =
-
Thread
Displaydramen (diesmal EADIP081)
delay5ms dec temp cpi temp, 0x00 brne powerupwait ldi temp, 0b00000011 out portc, temp cbi portc, 4 cbi portc, 5 rcall lcd_enable rcall delay5ms rcall lcd_enable rcall delay5ms rcall lcd_enable rcall delay5ms ldi temp, 0b00000010 out portc, temp
Bei Problemen mit PORTC immer erstmal JTAG Fuse ausschalten;)
-
Thread
atmega32 Ports kaputt?
angesteuert werden. Damit das Programm läuft muss der Atmega32 korrekt beschaltet sein. Falle bei PORTC: JTAG Fuse im Werkszustand.
schrieb im Beitrag #2034247: > Config Porta = &B11111111 > Config Portb = &B11111111 > Config Portc = &B11111111 > Config Portd = &B11111111 lass mal das Config weg
-
Thread
Stoppuhr Anzeigeproblem
'8 wird an dritter Stelle ausgegeben PortC = &B00000100 waitms 2 portB = &B00000011 '3 wird an vierter Stelle ausgegeben PortC = &B00001000 waitms 2 .....usw Return ------------------
'Erste Stelle der Minutenanzeige einschalten Waitms 2 Portc = Lookup(m2 , Tabelle) 'Lookup-Befehl: (Für jeden Wert von M2 wird der dazugehörige wert in der Tabelle an PortC ausgegeben) Portb = &B00001000
-
Thread
AVR Einstieg
nachschaun den du benutzt. wenn du z.b den adc am mega8 benutzten willst schaust du nach wo der ist. portc. du willst den eingang 0 an portc.0 benutzten, dann schaust du im stk user guide nach wo der portpin ist: an portc pin1 (links oben).
sorry ich raffs nich. woran sieht man dass der atmega8 am portc connected is? overview - blockdiagram? da steht ja was von portc und portb dabei is portc eher in relation zum adc... is damit der portc vom stk500 gemeint?
-
Thread
Atmega16 PortD
Matrix von den PINAs getrieben werden heller sind als die welche von PINDs getrieben werden. An PORTC und PORTB hängen die MosFets.
unter dem Controller zu VCC geht ist nicht in Ordnung. Wie hoch sind die Spannungen an PORTB, PORTC?
-
Thread
Inkrementieren- aber wo ist der Fehler (ATmega8)
Ausgang PORTB=0xF0; //B -> 4-7 pullup int a; a=1; do { PORTC=1; if (!(PINB&0b00010000)) { a=a++; } if (a==5) { PORTC=0; } } while(1); } //========================================
ein Reaktionstest. Die Taste muss losgelassen werden, wenn a==5 ist. Nur dann wird der Code >> PORTC=0; dauerhaft (in jedem Durchlauf) ausgeführt. Die Chancen dafür stehen schlecht... :-o Denn beim nächsten Durchlauf der while()-Schleife wird >> PORTC=1; gesetzt, a wird 6, und >> if (a==5)
-
Thread
AVR Soft-PWM mit max. 256 LEDs
r14,X+ ;2 out PORTB,r14 ;1 ld r14,X+ ;2 out PORTC,r14 ;1 sbi PORTA,0 ;2 out PORTA,r15 ;1 ld r14,X+ ;2 out PORTB,r14 ;1 ld r14,X+ ;2 out PORTC
r14,X+ ;2 out PORTB,r14 ;1 ld r14,X+ ;2 out PORTC,r14 ;1 sbi PORTA,2 ;2 out PORTA,r15 ;1 ld r14,X+ ;2 out PORTB,r14 ;1 ld r14,X+ ;2 out PORTC
-
Thread
Pins und Bits verknüpfen
Denkfehler? [code] DDRC = (1 << DDRC1) |(0 << DDRC2) | (0 << DDRC3) | (0 << DDRC4) | (0 << DDRC5); PORTC = (1 << PORTC2)| (1 << PORTC3)| (1 << PORTC4)| (1 << PORTC5); Ausgabe = (PINC5 << 0) | (PINC4 << 1) | (PINC3 << 2) | (PINC2 << 3); //Ich will hier Bit 0-3 entsprechend der PINC's setzen
gestalten als ich es in der Ausgaberoutine programmiert habe [code] //macros #define Heizung_an (PORTC |= (1 << PORTC1)); // Funktion um das Relais zu schalten #define Heizung_aus (PORTC &= ~(1 << PORTC1)); // Funktion um das Relais zu schalten [/code] Gruß Dietmar
-
Thread
MAX518 keine Funktion
if(TWIC_MASTER_STATUS & (1<<TWI_MASTER_ARBLOST_bp)) { twiname->MASTER.CTRLA = 0; PORTC.DIRSET = PIN1_bm; for(uint8_t i=0;i<9;i++) { PORTC.OUTSET = PIN1_bm; _delay_us(20); PORTC.OUTCLR = PIN1_bm; _delay_us(20); } PORTC.DIRCLR = PIN1_bm;
if(TWIC_MASTER_STATUS & (1<<TWI_MASTER_ARBLOST_bp)) { twiname->MASTER.CTRLA = 0; PORTC.DIRSET = PIN1_bm; for(uint8_t i=0;i<9;i++) { PORTC.OUTSET = PIN1_bm; _delay_us(20); PORTC.OUTCLR = PIN1_bm; _delay_us(20); } PORTC.DIRCLR = PIN1_bm;
-
Thread
Interrupt mit Bascom wird doppelt ausgeführt
$regfile = "m48def.dat" 'compile for mega48 $crystal = 10000000 Config Portc = Output Config Portd = Input Config Portb = Input Portc = 0 Portb = 255 Portd = 255 'Pullups Declare Sub Inter On Int0 Inter On
interrupt routine Disable Int0 'prevent double triggering For C = 1 To 10 '100 images Portc.0 = 1 'set camera pin high Waitms 49 'wait a moment Portc.0 = 0 'set low Waitus 1000 'allow readout Next C
-
Thread
Input auslesen
Hi >data = PORTC & (1 << 2); PINC ist das Eingangsregister. Außerdem muss JTAG deaktiviert werden, denn das benutzt PORTC2. MfG Spess
>data = PORTC & (1 << 2); PINC, PINC, PINC, PINC, PINC, PINC, PINC Nicht PORTC verdammt noch mal.
-
Thread
ATmega16 oder ATmega32 und ACRISP mk II programmieren?
m32def.dat" $framesize = 32 $swstack = 32 $hwstack = 32 $crystal = 16000000 $baud = 9600 Config Portc.0 = Output Config Portc.1 = Output Config Portc.2 = Output Config Portc.3 = Output Config Portc.4 = Output Do Portc.0 = 1 Portc.1 = 1 Portc.2 = 1 Portc.3 = 1 Portc
-
Thread
Einfachere Schreibweise gesucht
auch einfacher? Wie PC2 != PD6 [c] while(1) { if (PIND & (1<<PIND6)) { PORTC &= ~(1<<PC2); //Setzt PC2 1 } else { PORTC = PORTC | (1<<PC2); //Setzt PC2 1 } if (PIND & (1<<PIND7)) { PORTC &= ~(1<<PC3); } else { PORTC = PORTC | (1<<PC3); } } return 1; [/c]
-
Thread
Funktion will nicht - Port_Init
('C', 2, 5); Also, nur die Ports PORTC2 - PORTC5 sollen als Output dienen. Jedoch kommt der folgende Build-Fehler: Error called object 'ports_out' is not a function or function pointer Warum will er ports_out als funktion
deklariert haben, wenn ich doch einfach nur den Wert übergeben will. Sprich ... Die Ports von PORTC von 2 bis 5 sollen als Output deklariert werden, also Register DDRC: 0b00111100 ... entspricht 0x3C entspricht dem Wert 60. und Register PORTC (Angeschlossene LED's aus) entspricht 0xff
-
Thread
SREG untersuchung in C
] #include <avr/io.h> int main (void) { DDRC = ( 1 << PC5 ); // PC5 an PORTC als Ausgang setzen PORTC ^= ( 1 << PC5 ); // LED erstmal ausschalten uint8_t Ergebnis = 0x00 + 0x00; // Rechnen if (SREG & 0x02) // wenn Zero-Flag gesetzt dann ...
spring ldi r16, 0x00 ; ansonsten ... out PORTC, r16 ; LED an ende: rjmp ende [/avrasm]
-
Thread
I²C beim ATmega8 initialisieren
cbi PORTC,4 ;clear SDA for 1st adress 0 rcall delay25us rcall pulse ;Transmit-pulse on SCL sbi PORTC,4 ;set SDA for 2nd adress 1 rcall delay25us rcall pulse cbi PORTC,4 ;0 rcall
pulse nop ;0 rcall delay25us rcall pulse ;Transferpulses on SCL pulse: sbi PORTC,5 ;set SCL rcall delay25us cbi PORTC,5 rcall delay25us ret
-
Thread
2x 7 Segment Multiplexen mit ATmega32 - Grundlagenproblem
1k Widerstand => PC5). Den Code habe ich dann auf folgendes reduziert: [c] DDRC = 0xff; PORTC &= ~(1<<PC5); PORTC |= (1<<PC4); [/c] Leider geht die LED nicht. Was mache ich nun?
main(void) { int i = 0; int j = 0; DDRD = 0xff; PORTD = 0xff; DDRC = 0xff; PORTC &= ~(1<<PC4); PORTC |= (1<<PC5); while(1) { for (j = 0; j < 10; j++) { for (i = 0; i < 15000; i++) {} sevenseg_show(j); } PORTC ^= (1<<PC4); PORTC
-
Thread
PORTPIN einlesen
ich habe meine Funktion auch schon so geschrieben: int Px(void) { if (PORTC0<=0b01111111)return 1 ; if (PORTC1<=0b10111111)return 2 ; if (PORTC2<=0b11011111)return 3 ; return 0; } hat aber ebesowenig funktioniert :-(
Dann hast Du da ein Problem. Das trifft aber dann nicht nur auf PORTC.4 zu sondern auch auf PORTC.2, 3 und 5.
-
Thread
If Abfrage mit unterschiedlichen Zeiten
porgrammierten Code ;) Achim Seeger schrieb im Beitrag #2641876: > if(!(PINE&(1<<PE4))) // Abfrage PortC PC5 LED 5 Grün Vermutlich musst du noch etwas mehr Code zeigen, denn hier finde ich so nichts falsches, außer die Abfrage oben (wait11). Grüße
Hauptprogramm nimmst du Zeitstempel und prüfst diese auf Differenzen. Etwa so: [c] #define PORT_LED1 PORTC #define PIN_LED1 PC4 #define PORT_LED2 PORTC #define PIN_LED2 PC8 volatile uint32_t u32TimerTickMs; ISR (...) // alle 10ms { u32TimerTickMs += 10; } uint32_t fTimeStampGet
-
Thread
Proplem mit LED Matrix 20 x 7
PORTC |=(1<<PC5); // Takt HIGH -> Flanke => schreiben PORTC &=~(1<<PC5); // Takt LOW PORTC |= (1<<PC4); // Bit 1 Setzen PORTC |=(1<<PC5); // Takt HIGH -> Flanke => schreiben PORTC &=~(1<<PC5); // Takt LOW PORTC &=~ (1<<PC4); // Bit 0 Setzen PORTC |=(1<<PC5); // Takt HIGH -> Flanke => schreiben PORTC &=~(1<<PC5); // Takt LOW
-
Thread
Byte Bit für Bit seriell ausgeben
1 actBit=(numbers[2]<<bitNr); actBit=actBit & bitMaske; if(actBit==0) cbi(PORTC,PIN2); else sbi(PORTC,PIN2); //Schiebeoperation durchf¸hren: sbi(PORTC,PIN3); _delay_us(5); cbi(PORTC,PIN3); } //mit einem Byte fertig => an Speicher ‹bergeben cbi(PORTC,PIN4); _delay_us(5); sbi(PORTC,PIN4); } [/c] mfg,
-
Thread
LCD am mega8 will nicht ganz
ziemlich am Ende deiner Programminitialisierung ein: Beispiel: Config Lcdpin = Pin , Db4 = Portc.5 , Db5 = Portc.4 , Db6 = Portc.3 , Db7 = Portc.2 , E = Portb.5 , Rs = Portc.1 Config Lcd = 16 * 2 Waitms 100 Upperline Lcd "TIS ISSE TEST" Lowerline Lcd "GUHDEN DACH!"
Das ich PortC als normale Pins verwenden kann wusste ich nicht, aber hab im Datenblatt mir das ganze mal angesehen, jetzt ist auch klar wie/warum es geht... ;-) Werde das alles mal testen, wobei ich mir schon
-
Thread
ADC Messwert springt
setzten ( PortCx = 1 ). Wo geschieht dies im Programm ? Habe nur gefunden, das der komplette PortC als Ausgang geschaltet wird. main: ... ldi temp1, 0xFF out DDRC, temp1 ; Port C = Ausgang Bernd_Stein
der komplette PortC als Ausgang geschaltet wird. Das habe ich nun wieder übersehen, da ich nicht weiter gesucht hatte, nachdem ich Obiges gesehen hatte. Aber das ist ja noch schlimmer, damit hat der Sensor ja gar keine
-
Thread
Seltsamer Fehler mit Festkommaarithmetik und 7-Segment
uint16_t count=0; ISR(TIMER0_OVF_vect) { flag.multiplex=1; if(flag.display) { if((PORTC&0b00111000)==0b00011000) { PORTD=0; PORTC=0b101000; PORTD=led_data[1]; } else if((PORTC&0b00111000)==0b00101000) { PORTD=0; PORTC=0b110000; PORTD=led_data[0]; } else if((PORTC&0b00111000)==0b00110000) { PORTD=0; PORTC=0b011000; PORTD=led_data[2]; } } else { PORTD=0xFF; PORTC=0b00011000; } } int main(void) {
-
Thread
LCD-Ansteuerung
eine ist parallel(ganzer port) dies ist seriell: c: void sende(unsigned char datenbyte) { PORTC.7=datenbyte &0b00000001; wartekurz(); PORTC.7=datenbyte &0b00000010; wartekurz(); PORTC.7=datenbyte &0b00000100; ... wartekurz(); PORTC.7=datenbyte &0b01000000; } ist das nicht möglich
von dem LCD Display? Auf die Frage kommt sowas: [c] void sende(unsigned char datenbyte) { PORTC.7=datenbyte &0b00000001; wartekurz(); PORTC.7=datenbyte &0b00000010; wartekurz(); PORTC.7=datenbyte &0b00000100; ... wartekurz(); PORTC.7=datenbyte &0b01000000; } [/c] Was hat das mit I²C
-
Thread
SD_Karte Directory erstellen
char*)buffer_adc); ffwrite(0x0D); ffwrite(0x0A); ffclose(); PORTC ^=(1<<PC0); } } counter_sd++; _delay_ms(100); start_converting(); } } [/c]
char*)buffer_adc); ffwrite(0x0D); ffwrite(0x0A); ffclose(); PORTC ^=(1<<PC0); } } counter_sd++; _delay_ms(100); start_converting(); } } [/c]
-
Thread
Problem: Stoppuhr in C (Interrupts und Pull-Ups)
Timer0 deaktivieren (00000000) //alle Anzeigen auf 0 PORTA = zahl[0]; PORTB = zahl[0]; PORTC = zahl[0]; PORTD = zahl[0]; running = 0; //Indikator für "läuft nicht" } //----------------------------------- [/c]
PORTA = zahl[sek[0]]; //Port für 10er Sekunden PORTB = zahl[sek[1]]; //Port für Sekunden PORTC = zahl[sek[2]]; //Port für 1/10 Sekunden PORTD = zahl[sek[3]]; //Port für 1/100 Sekunden } } ... [/c]
-
Thread
Servos und PWM
left(){ // Funktion linksdrehung _delay_ms(20); PORTB |= (1 << 0); /* setzt Bit 0 an PortC auf 1 */ _delay_ms(2); PORTB &= ~(1 << 0); /* loescht Bit 0 an PortC */ _delay_ms(20); PORTB |= (1 << 0); /* setzt Bit 0 an PortC auf 1 */ _delay_ms(2); PORTB &
&= ~(1 << 0); /* loescht Bit 0 an PortC */ _delay_ms(20); PORTB |= (1 << 0); /* setzt Bit 0 an PortC auf 1 */ _delay_us(1000); // 1 ms warten für rechtsdrehung PORTB &= ~(1 << 0); /* loescht Bit 0 an PortC */
-
Thread
LCD-Display mit s6a0069 Controllter und Atmega 32
; _delay_ms(1000); PORTB=0b00000000; PORTC=0b00111000; _delay_ms(1000); PORTB=0b00000001; _delay_ms(1000); PORTB=0b00000000; PORTB=0b00000000; PORTC=0b00111000; _delay_ms(1000); PORTB=0b00000001; _delay_ms(1000); PORTB=0b00000000; PORTC=0b00001111; _delay_ms(1000); PORTB=0b00000001; _delay_ms(1000); PORTB=0b00000000; _delay_ms(1000); PORTB=0b00000000; PORTC=0b00000001; _delay_ms(1000); PORTB=0b00000001; _delay_ms(1000
-
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
Hilfe-LCD Problem
. Fakt: Ich weiß das bim AT90S4433 Bei portD 8 I/O Pins und bei PortC nur 6 I/O Pins dran sind aber das dürfte doch kein Problem sein oder?? Meine Frage: Wie kann ich mein LCD am PortC meines AT90S4433 mit dem im Tourial beschriebenen Programm ansteuern?? Kann
geschrieben. Und jetzt nochmal zu meiner schon oben stehenden Frage wie kann ich diesen code auf dem PortC meines AT90S4433 einsetzten damit das LCD am PortC auch wie am PortD das Wort "Test" ohne Fehler anzeigt??
-
Thread
CNC Maschinchen
Indy = 4 End If 'ports setzen Portb.4 = My(indy).1 Portb.5 = My(indy).2 Portc.0 = My(indy).3 Portc.1 = My(indy).4 End Sub Sub Motorz(rz As Integer ) Indz = Indz + Rz 'wenn obergrenze erreicht, dann auf anfang setzen If Indz > 4 Then Indz = 1 End
erreicht, dann auf ende setzen If Indz < 1 Then Indz = 4 End If 'ports setzen Portc.2 = Mz(indz).1 Portc.3 = Mz(indz).2 Portc.4 = Mz(indz).3 Portc.5 = Mz(indz).4 End Sub
-
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
Arrays Vergleichen
Input_Clock 1 //PIN C1 als Clock am Input Register ... while (a <16) { while(i<8) { PORTC |= (1<<Input_Clock); _delay_us(10); PORTC &= ~(1<<Input_Clock); //1 Clock, um das Register um eine Stelle zu schieben Data_to_send[a] &= ~(1<<i); Data_to_send[a] |= ((Pin_input)<<i); i+
0; a<16; a++) { Data_to_send[a] = 0; // Annahme: Alles ist 0 for (i=0; i<8; i++) { PORTC |= (1<<Input_Clock); _delay_us(10); PORTC &= ~(1<<Input_Clock); Data_to_send[a] >>= 1; // Platz schaffen für's nächste Bit if (PINC & (1<<PINC0)) Data_to_send[a] |= 0x80
-
Thread
VPP, MCLR und VDD
Compiler benutzt du? Nochwas. Im Main() hast du TRIS definiert, aber den zustand nicht (PORTB und PORTC). d.h. Ausgangspegel ist undefiniert.
> Im Main() hast du TRIS definiert, aber den zustand nicht > (PORTB und PORTC). d.h. Ausgangspegel ist undefiniert. Richtig, das fehlt noch: PORTB = 0x00; // Reset Port B PORTC = 0x00; // Reset Port C
-
Thread
AVR-Board, Handy, RS232
'Tasten auf Board ' Initialisierung LC-Display Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.2 , Rs = Portc.0 Config Lcd = 16 * 2 Config Portc = Output Reset Portc.1 Initlcd Cursor On Cls Lcd "Start" Wait 10 On Urxc Rec_isr
-
Thread
Portd.1 funktioniert nicht
Portb.2 Set Portb.3 Set Portb.4 Set Portb.5 Set Portb.6 Set Portb.7 Set Portc.0 Set Portc.1 Set Portc.2 Set Portc.3 Set Portc.4 Set Portc.5 Set Portc.6 Set Portc.7 Set Portd.0 Set Portd.1 Set Portd.2 Set Portd.3 Set Portd.4
Reset Portb.3 Reset Portb.4 Reset Portb.5 Reset Portb.6 Reset Portb.7 Reset Portc.0 Reset Portc.1 Reset Portc.2 Reset Portc.3 Reset Portc.4 Reset Portc.5 Reset Portc.6 Reset Portc.7 Reset Portd.0 Reset Portd.1 Reset Portd.2 Reset Portd
-
Thread
"value computed not used"
PIN, PORTA |= PIN) :\ ( (&PORT==&PORTB) ? (DDRB &= ~PIN, PORTB |= PIN) :\ ( (&PORT==&PORTC) ? (DDRC &= ~PIN, PORTC |= PIN) :\ ( (&PORT==&PORTD) ? (DDRD &= ~PIN, PORTD |= PIN) :\ 0 ) ) )\ ) #define ENC_A_GPIO PORTC #define ENC_A_Pin (1<<PC3) // ... int
) ? (DDRB &= ~(1 << 1) | (1 << 2), PORTB |= (1 << 1) | (1 << 2)) :\ ( (&PORTC==&PORTC) ? (DDRC &= ~(1 << 1) | (1 << 2), PORTC |= (1 << 1) | (1 << 2)) :\ ( (&PORTC==&PORTD) ? (DDRD &= ~(1 << 1) | (1 << 2), PORTD |= (1 << 1) | (1 << 2)) :\ 0 ) ) )\ ) [/c]
-
Thread
Problem mit ATmega162
mal die beiden Quelltexte. Quelltext C: #include <avr/io.h> int main (void){ DDRC=0xff; PORTC=0x00; int wert01; int wert02; while(1) { for(wert01 = 0; wert01 <= 10; wert01++){ PORTC=0x01; } for(wert02 = 0; wert02 <= 10; wert02++){ PORTC=0x00; } }//end_while(1)
} for(wert02 = 0; wert02 <= 10; wert02++){ PORTC=0x00; } }//end_while(1) }//end_main Neu: #include <avr/io.h> int main (void) { DDRC=0xff; PORTC=0x00; long wert; do { wert = 0; while(wert < 50000) { PORTC=0x01
-
Thread
4x4 Matrixtastatur mit Tasterentprellung
also nicht von KEY_ROW0 bis KEY_ROW3, sondern von KEY_ROW1 bis KEY_ROW4: [code] #define KEY_ROW1 PORTC0 #define KEY_ROW2 PORTC1 #define KEY_ROW3 PORTC2 #define KEY_ROW4 PORTC3 #define KEY_COL1 PORTC4 #define KEY_COL2 PORTC5 #define KEY_COL3 PORTC6 #define KEY_COL4 PORTC7 [/code] Somit
der RESET-Pin. Im Anhang ist eine geänderte Version des Quelltextes aus dem Urposting: PortD statt PortC wird nun verwendet. Gruß, Marc
-
Thread
V : Basic-Compiler FAST-AVR
(temp1) temp1= temp1 And &b00001111 PORTC=temp1 lcd_enable() temp2=temp2 And &b00001111 PORTC=temp2 lcd_enable() WaitUs 5 End Sub Sub lcd_init() WaitMs 250 PORTC=&b00000011 lcd_enable() WaitMs 5 lcd_enable
() WaitMs 5 End Sub Sub lcd_enable() PORTC.4=1 Nop 3 PORTC.4=0 End Sub
-
Thread
xmega timer mit AND verbinden
Clear Bit in I/O Register I/O(A, b) ← 0 1 Clocks Ein Beispiel mit einem ATmega Anfang: cbi PORTC, 6 ;1Takt LOW sbi PORTC, 6 ;1Takt HIGH cbi PORTC, 6 ;1Takt LOW sbi PORTC, 6 ;1Takt HIGH cbi PORTC, 6 ;1Takt LOW sbi PORTC, 6 ;1Takt HIGH cbi PORTC, 6 ;1Takt LOW nop ;1Takt nop
Carsten-Peter C. schrieb im Beitrag #7724890: > Ein Beispiel mit einem ATmega > Anfang: > cbi PORTC, 6 ;1Takt LOW > sbi PORTC, 6 ;1Takt HIGH Atmega musst du schon näher spezifizieren. Die Classic-ATmegas brauchen für cbi und sbi je zwei Takte.