-
Thread
Atmega8 mit rechts- links- Motoransteuerung
<< PB0 ); } uint8_t EndschalterOben() { PINC & ( 1 << PC2 ); } void MotorAuf() { PORTC &= ~( 1 << PC1 ); PORTC |= ( 1 << PC0 ); } void MotorZu() { PORTC &= ~( 1 << PC0 ); PORTC |= ( 1 << PC1 ); } void MotorStop() { PORTC &= ~( 1 << PC0 ); PORTC &= ~( 1 << PC1
PINB & ( 1 << PB1 ); } uint8_t ExtZu() { PINC & ( 1 << PC3 ); } void MotorAuf() { PORTC &= ~( 1 << PC1 ); PORTC |= ( 1 << PC0 ); } void MotorZu() { PORTC &= ~( 1 << PC0 ); PORTC |= ( 1 << PC1 ); } void MotorStop() { PORTC &= ~( 1 << PC0 ); PORTC &= ~( 1 << PC1
-
Thread
Interrupts Programm wird unterbrochen warum?
<util/delay.h> #include <avr/interrupt.h> void herunterfahren(void) { PORTA=0xF0; PORTC=0x03; //PIN C2 auf 0 setzen für 12V int y; for(y=0;y<1000;y++) { _delay_ms(1); // Wartezeit starten bis 12V abgeschaltet } PORTC=0x01; //Pin C1 auf 0 setzen für
zu gering daher abschalten! } } void spannungeinschalten(void) { PORTC=0x03; //Pin C1 auf 1 setzen für 5V int y; for(y=0;y<1000;y++) { _delay_ms(1); //Wartezeit bis 5V eingeschaltet } PORTC=0x07; //PIN C2 auf 1 setzen für 12V
-
Thread
Counter Geschwindigkeit
ein/ausschalten: [c]... long i; while (1){ for(i=0;i<=6000000;i++){} if(PINC.0==1) PORTC.0=0; else PORTC.0=1; }; ...[/c] Der "geht mir aufn Sac*"-Teil: Diese Schleife sollte wie man sieht bis 6000000(6Millionen) zählen. Dazu(also für eine Periode) benötigt mein ATMEGA32 mit
for(i=0;i<=6000000;i++){} for(i=0;i<=6000000;i++){} if(PINC&0x01) PORTC=0x00; if(PINC.0==1) PORTC=0; else PORTC=0x01; else PORTC=255; } }; } }[/c] Der linke 4 mal schneller :D
-
Thread
LCD KS0073 am AVRATMega128
Hab es so angepasst: #include <avr/io.h> //LCD-Steuerleitungen #define LCD_CONTROL PORTC #define LCD_CONTROL_DIR DDRC #define LCD_RS 5 //PortD.4 #define LCD_RW 6 //PortD.6 #define LCD_EN 7 //PortD.5 #define LCD_DATEN PORTC #define LCD_DATEN_DIR DDRC
wieder aus! Hab keine ahnung woran das liegen könnte.... das display ist ein lcd1602A und liegt an portc. quellcode befindet sich im anhang...
-
Thread
ATmega8 läuft um den Faktor 10 zu langsam
>doch macht es. >PORTC ^= (1<<0); Nein. XOR ist immer: IN Rxx, PORTC EOR Rxx, 0x01 OUT PORTC, Rxx JMP zurück Aber das sollte man im ASM-Listing erkennen. Da kann man zählen. Diese vier Befehle sollten acht
tust. Dieser syntaktisch wunderschön aufgedonnerte Bullshit: > while(1) > { > PORTC ^= (1<<0); > } wird vom Compiler (ohne Optimierung) nämlich (bestenfalls) etwa so ausgedrückt: loop: in reg1,PORTC ;1 ldi reg2,1<<0 ;1 eor reg1,reg2 ;1 out PORTC,reg1
-
Thread
Fehler Sprungtabelle
;'a' sbi PORTC,0 ;'b' cbi PORTC,1 ;'c' sbi PORTC,2 ;'d' cbi PORTC,3 ;'e' sbi PORTC,4 ;'f' cbi PORTC,5 ;'g' rjmp ENDE EINS: sbi PORTB,5 ;'a' cbi PORTC,0 ;'b' cbi PORTC,1 ;'c' sbi PORTC,2 ;'d' sbi PORTC,3 ;'e' sbi PORTC,4 ;'f' sbi PORTC,5 ;'g' rjmp ENDE ZWEI: cbi PORTB,5
-
Thread
LED mit Microcontroller schalten
Wenn du 8 LEDs an PortC hast dann versuche mal folgendes: [c] while(1){ PORTC = 0xAA; //jede zweite an _delay(1000000); //delay for 1000000 cycles PORTC = 0x55; //und
Du hast ja schon mal den ganzen Port C auf Ausgang gestellt. Das ist schon mal gut. PortC ist aber nicht nur ein Bit sondern ein ganzes Byte. Du sagst jetzt ja mit PORTC =1 das gleiche wie PORTC = b00000001.
-
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
XMEGA einzelnen Pin eines Ports ansprechen
<avr/io.h> int main(void) { uint8_t ucTaster; PORTA.DIR = 0xFF; PORTA.OUT = 0xFF; PORTC.DIR = 0; PORTC.OUT = 0xFF; while(1) { ucTaster = PORTC.IN; PORTA.OUT = ucTaster; } } Was muss ich hier ändern??? DANKE!!!!
PORTC.OUT = 0xFF; --> hat keinen Sinn bei eingängen
-
Thread
Display TC1602E.01
); PORTC |=(1<<PC1) | (1<<PC0) | (1<<PC3) | (1<<2); PORTC &=~ (1<<PC5) | (1<<PC4) | (1<<PC7) | (1<<PC6); PORTA |=(1<<PA2); PORTA &=~(1<<PA2); //clear display PORTA &=~ (1<<PA4) | (1<<PA6); PORTC |=(1<<PC1); PORTC &=~(1<<PC0) |(1<<PC2) | (1<<PC3) | (1<<PC5) | (1<<PC4) |(1<<PC7)|(1<<PC6) ; PORTA |=(1<<PA2); PORTA &=~(1<<PA2); DELAY1 //entry mode PORTA &=~ (1<<PA4) | (1<<PA6); PORTC &=~(1<<PC1); PORTC
-
Thread
If Else geht nicht
if (licht==1) { for(i=0;i<10000;i++) { PORTB=0b00111000; PORTC=0b00111111; PORTD=0b11100000; _delay_ms(2); } } if (licht==2) { for(i=0;i<10000;i++) { PORTB=0b00111000; PORTC=0b00111111; PORTD=0b11100000; _delay_us(750); PORTB=0b00000000; PORTC=0b00000000; PORTD=0b00000000; _delay_us(250); } } if (licht==3) { for(i=0;i<10000;i++) { PORTB=0b00111000; PORTC=0b00111111;
-
Thread
Timer1, CTC, Interrupt, REST, mega8, Problematik
BADISR_vect) { count2=0; while(1) { count2++; if(count2 == 10000) { PORTC ^= (1<<PC5); count2=0; } } } int main(void) { cli(); DDRC |= (1<<PC5); PORTC = (1<<PC5); OCR1A = 7812; // 8000000/1024 TCCR1A = (0 << COM1A1)|(0 << COM1A0
Hast du die JTAG Fuse deaktiviert? Sonst ist Verzweiflung auf PortC vorprogrammiert. Ich spreche aus Erfahrung. ;-)
-
Thread
einfache Schreibweise um Pins zu schalten
Programm häufig von einem Port einzelne Pins aus und ein. Momentan mache ich das mit den Ausdrücken [C]PORTC |= (1 << 0);[/C] bzw. [C]PORTC &= ~(1 << 0);[/C] Kann ich hier am Anfang der Datei eine Zuweisung machen, damit ich später im Programm z.B. anstelle [C]PORTC |= (1 << 0);[/C] nur noch [C]pinc0_ein
#define pinc0_ein PORTC |= (1 << 0)
-
Thread
Prozessorauslastung bei SPI
Die COdes wurden wohl nicht korrekt übertragen. Nochmal: Das PORTC-Bit0 ist der Debug Pin. Für das erste Bild gilt: [c] while(len--) { // write data SPDR = *data++; PORTC = 1; while(!(SPSR & (1<<SPIF))); PORTC = 0; } [/c] Für das zweite Bild: [c] while(len--) { // write data PORTC = 1; SPDR = *data++; PORTC = 0; while(!(SPSR & (1<<SPIF))); } [/c]
-
Thread
AVR: Ist PORTx |= atomar?
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.
-
Thread
Variablen zwischen Unterprogrammen übergeben
==5) PORTC=0b01010000; if (min_einer==6) PORTC=0b01100000; if (min_einer==7) PORTC=0b01110000; if (min_einer==8) PORTC=0b10000000; if (min_einer==9) PORTC=0b10010000; } } [/c]
(min_einer==5) PORTC=0b01010000; > if (min_einer==6) PORTC=0b01100000; > if (min_einer==7) PORTC=0b01110000; > if (min_einer==8) PORTC=0b10000000; > if (min_einer==9) PORTC=0b10010000; > } void_umrechnen
-
Thread
Interrupt programmierung mit HI-Tech
//PORTB TRISB = 0b11000000; PORTB = 0b11110000; //PORTC TRISC = 0b11011111; PORTC = 0b11111111; ANSEL = 0b00111111; ANSELH = 0b00000000; //PWM CCP1CON = 0b00001101; T2CON = 0b01111110; //Interrupt
//PORTB TRISB = 0b11000000; PORTB = 0b11110000; //PORTC TRISC = 0b11011111; PORTC = 0b11111111; ANSEL = 0b00111111; ANSELH = 0b00000000; //PWM CCP1CON = 0b00001101; T2CON = 0b01111110; //Interrupt
-
Thread
Atmega8 pony prog
nacheinander angehen und dann wieder aus :) $regfile = "m8def.dat" $crystal = 1000000 Config Portc.0 = Output Config Portc.1 = Output Config Portc.1 = Output Do Portc.0 = 1 Waitms 500 Portc.1 = 1 Waitms 500 Portc.2 = 1 Waitms 1000 Portc.0 = 0 Portc.1 = 0 Portc.2 =
>Config Portc.1 = Output >Config Portc.1 = Output Quatsch;) Config Portc.1 = Output Config Portc.2 = Output
-
Thread
PWM an atmega8
hätte ich auch direkt posten können) [c] int main(void) { /* Current port assignment: PORTC0 = Poti.1 PORTC1 = green led PORTC2 = yellow led PORTC3 = red led PORTC4 = taster 2 PORTC5 = taster 1 */ lcd_init(); // lcd test lcd_string
check if window is open if(WINDOW_SENSOR_PORT_ARRAY & (1<<WINDOW_SENSOR_PORT)) { PORTC &= 0b00110001; // turn off all leds PORTC |= (1 << PORTC3); // turn on red led continue; // skip next steps }
-
Thread
ATXmega32 PortC problem
habe nun Port A, B und C als Ausgänge definiert und alle auf low gesetzt und trotzdem habe ich an PortC Pin 3 immer high. PORTD.DIR=0xFF; PORTD.OUT=0x00; PORTA.DIR=0xFF; PORTA.OUT=0x00; PORTC.DIR=0xFF; PORTC.OUT=0x00; Was ich auch versuche, Pin3 an PortC bleibt high. Kann mir da jemand weiterhelfen
-
Thread
ADC zieht Spannung runter?
Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.3 , Db6 = Portc.2 , Db7 = Portc.1 , E = Portc.4 , Rs = Portc.5 Initlcd Config Lcdbus = 4
Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.3 , Db6 = Portc.2 , Db7 = Portc.1 , E = Portc.4 , Rs = Portc.5 Initlcd Config Lcdbus = 4
-
Thread
Bitweise Darstellung mit 10 LEDs
DDRD |= 0xFF; Also willst Du 14bit ausgeben? Dann musst Du für die oberen 6bit schieben PORTC |= (value>>8);
voll Overplay. Lösung 2: Bit-Shifting, da bräuchtest du je LED eine Zuweisung: Bsp mit 4 LED an PORTC:[x--x-xx-] (x = Ausgang) [c] PORTC |= (value & 1) << 1; PORTC |= (value & 2) << 2; PORTC |= (value & 4) << 4; PORTC |= (value & 8) << 7; [/c] Lösung 3: (da habe ich aber noch keine zufriedenstellende
-
Thread
Eingangsport auslesen und in den Ausgang(port) schreiben
, r24 ; schreiben wir nach PortC und schon geht es...
machen: label: IN R24, PINB ; die Bits vom PortB ins allgemeine Register R24 OUT PORTC, r24 ; schreiben wir nach PortC rjmp label ; Sprung nach label Wobei 'label' ein Bezeichner deiner Wahl ist. MfG Spess
-
Thread
Wozu übertrieben schnelle Microcontroller?
Gerhard O. schrieb im Beitrag #7281415: > Wenn ich an uC HW > arbeite ist mir eigentlich "PORTC |= (1<<7) lieber; Hmm, mein Compiler wirft einen Fehler weil er PORTC nicht kennt. Es geht doch dabei um Abstraktion. Und die DigitalOut oder was auch immer Klasse wird als Komponente getestet
*portpin_set_output(PORTC, 4);* [code] rc/test_01_blink.c: In function 'main': src/test_01_blink.c:15:2: error: incompatible type for argument 1 of 'portpin_set_output' portpin_set_output(PORTC,4); ^ In file included
-
Thread
USART tx-timing Problem
M328-Nano? Selbst Google ist da etwas hilflos. Karl K. schrieb im Beitrag #7774731: > Mit PORTC &= ~(1<<2); wird von Senden auf Empfangen umgeschaltet. Karl K. schrieb im Beitrag #7774617: > PORTC|=(1<<2); > ... > PORTC &= ~(1<<2); Magic Numbers machen den Code nicht gerade lesbarer.
Rainer W. schrieb im Beitrag #7774791: > Karl K. schrieb: >> PORTC|=(1<<2); >> ... >> PORTC &= ~(1<<2); > > Magic Numbers machen den Code nicht gerade lesbarer. Spätestens wenn der > Pin woanders hin gelegt werden soll - viel Spaß in längerem Quellcode. Stimmt
-
Thread
bockiges LCD
unauffällig: [c] void kdo(uint8_t dat) // ein Kommando zum LCD { _delay_ms(10); PORTC &= ~(1<<RS); // RS=0 (Daten ins Steuerregister) PORTC |= (1<<E); // = E high zumPCF(dat); // legt ein Byte an die PCF-Ausgänge PORTC &= ~(1<<E); // das Byte
[c] > void kdo(uint8_t dat) // ein Kommando zum LCD > { > _delay_ms(10); > PORTC &= ~(1<<RS); // RS=0 (Daten ins Steuerregister) > zumPCF(dat); // legt ein Byte an die PCF-Ausgänge > PORTC |= (1<<E); // = E high > _delay_us(2); // pause
-
Thread
I2C Display läuft nicht
SEN = 1; //while(SSP1CON2.ACKEN == 0){} } void i2c_send_data(unsigned short data_){ PORTC.RC0 = 1; PORTC.RC4 = SSP1CON2.ACKSTAT; SSP1BUF = data_; //Adressierung while(SSP1STAT.BF == 1); //Warten bis der Buffer leer ist PORTC = 0b00001011; Delay
SEN = 1; //while(SSP1CON2.ACKEN == 0){} } void i2c_send_data(unsigned short data_){ PORTC.RC0 = 1; PORTC.RC4 = SSP1CON2.ACKSTAT; SSP1BUF = data_; //Adressierung while(SSP1STAT.BF == 1); //Warten bis der Buffer leer ist PORTC = 0b00001011; Delay
-
Thread
Verstehe TWI überhaupt nicht
hwstack = 32 $framesize = 32 $swstack = 32 $lib "I2C_TWI.LBX" Config Twi = 400000 Config Scl = Portc.0 Config Sda = Portc.1 Const Tlc1 = &B11000000 Const Ledout0 = &H14 Or 128 I2cinit I2cstart I2cwbyte Tlc1 I2cwbyte 0 I2cwbyte 0 I2cstop I2cstart I2cwbyte Tlc1 I2cwbyte Ledout0
@MWS: Also Portc.0 und Portc.1 kann ich in den verschiedensten Frequenzen blinken lassen. Und wenn ich das Programm von dir aufspiele und Config Scl = Portc.0 Config Sda = Portc.1 weglasse, dann kann ich die LED's
-
Thread
ATmega64: Zugriff DDR_ PORT_ in header files
LED programmiert welches einwandfrei funktioniert: [c] int main(void) { DDRC |= (1<<PC0); PORTC |= (1<<PC0); while (1) { _delay_ms(1000); PORTC ^=(1<<PC0); } } [/c] Versuche ich dieses Programm nun aufzuteilen in: [c] #include "IncFile1.h" int main(void) { void init() while (1) { _delay_ms(1000); PORTC ^=(1<<PC0); } } [/c] und [c] #ifndef INCFILE1_H_ #define INCFILE1_H_ #include <avr/io.h> #include <util/delay.h> void init() { DDRC |= (1<<PC0); PORTC |= (1<<PC0); }
-
Thread
Hilfe ADC ATMEGA8
Ich glaube, die portc-pins als ausgang zu konfigurieren, hilft deinem vorhaben auch nicht so richtig nach vorn. Lass die portc-pins mal auf eingang.
Gcc schrieb im Beitrag #4714546: > Ich glaube, die portc-pins als ausgang zu konfigurieren, hilft deinem > vorhaben auch nicht so richtig nach vorn. Lass die portc-pins mal auf > eingang. stimmt, abgeändert, keine Funktion. jetzt weiß ich nicht mehr
-
Thread
Problem mit dem überschreiben einer Variable
> PORTC = PORTC | (0 << PC1); Was wird da wohl rauskommen? Dein Nachholbedarf liegt beim Thema Bitmanipulation in C. Als Tipp: Probiers mal so PORTC = PORTC & ~(1 << PC1); > In der Simulation funktioniert
Lothar Miller schrieb: >> PORTC = PORTC | (0 << PC1); > Was wird da wohl rauskommen? > Dein Nachholbedarf liegt beim Thema Bitmanipulation in C. > > Als Tipp: > Probiers mal so PORTC = PORTC & ~(1 << PC1); > >> In der
-
Thread
ATMEGA16 läuft nicht
(Ausgänge) DDRC ist 0xFF (ebenfalls) PORTA ist 0b10101010 (4 sollten auf alle Fälle leuchten) PORTC ist 0b00000010 (linke 7segment anzeige. PORTC.1 = 5V) LEDs in 7segment anzeige sind siehe oben über einen Puffer und Vorwiederstand an Vcc.
Kann es dann villeicht an der JTAGEN Fuse liegen, dass die den PORTC reserviert ? Die ist laut PONYProg nämlich 1 (Häkchen im Kästchen)
-
Thread
LED Array mit MBI5026CN und PIC 16F688
PORTC|0x01) // xxxx xxx1 Clock H -> Pin 10 #define C_0 PORTC=(PORTC&0xFE) // xxxx xxx0 Clock L #define D_1 PORTC=(PORTC|0x02) // xxxx xx1x Data H -> Pin 9 #define D_0 PORTC=(PORTC&0xFD) // xxxx xx0x Data L #define L_1 PORTC=(PORTC|0x04) // xxxx x1xx Latch H -> Pin 8 #define L_0 PORTC=(PORTC&0xFB) // xxxx x0xx Latch L #define SW1 !(PORTA&0x02) //
-
Thread
Stoppuhr mit Bascom AVR
dankbar. GRUNDIDEE: $regfile = "M16def.dat" $crystal = 1000000 "Eingänge" Config Portc.5 = Input "Start" Config Portc.4 = Input "Stopp" Config Portc.3 = Input "Reset" "Ausgänge" "werden noch bestimmt" Do If Portc.5 = 1 Then Portc.x = 1 And Portc.y "usw." Waitms 1 Portc.z "usw" "Das würde aber Jahre dauern (59.999 Schritte)
-
Thread
kanns Assembler schneller als Bascom!?
Buchegger wrote: > and rxx, $04 müsste eher "andi" sein, gell? > in rxy, PINC Da würde ich eher PORTC nehmen. Und PORTC.1 muss noch Null gesetzt werden vor dem or. Ich komm deshalb auf minimal 7 Takte: [pre] in r16, pind ;PIND einlesen in r17, portc ;PORTC einlesen lsr r16 ;Zustand
Pos. 1 schieben) andi r16, 0x02 ;Bit 1 maskieren, alle anderen löschen andi r17, 0xfd ;Bit 1 in PORTC-Zustand löschen or r17, r16 ;Zustand von PIND.2 an Pos. 1 von PORTC out portc, r17 ;PORTC schreiben [/pre] Registernummern nach Verfügbarkeit, aber auf jeden Fall > r16 wg. immediate-Operationen
-
Thread
Atmega8515 Alternative Portadressierung
PORTA = rand(); else if( tmp == 1 ) PORTB = rand(); else if( tmp == 2 ) PORTC = rand(); else PORTD = rand(); } oder musst du die Sequenz unbedingt zwischenspeichern?
Meine Idee wäre: [c] uint8_t *port; DDRA=DDRB=DDRC=DDRD=255; PORTA=PORTB=PORTC=PORTD=0; do { switch (rand()&3) { case 0: port=PORTA; break ; case 1: port=PORTB; break; case 2: port=PORTC;
-
Thread
Einsteigerfrage: Pin Toggeln in Assembler - PIC
jetzt nicht völlig falsch unterwegs bin. Inzwischen habe ich mir so selbst geholfen: [c] btfss PORTC,0 ;Gesetzt? goto TOGGEL_SET ;nein, also setzen und Ende bcf PORTC,0 ;ja, also löschen und Ende goto TOGGEL_END TOGGEL_SET; bsf PORTC,0 TOGGEL_END;[/c] Nicht Elegant, aber
genau was es soll - ohne die BSF/BCF Krücke ;-) main BANKSEL ANSELC clrf ANSELC BANKSEL PORTC clrf PORTC BANKSEL TRISC clrf TRISC BANKSEL PORTC endlos movlw b'00000001' xorwf PORTC,F goto endlos END (deinen Denkfehler habe ich oben schon erklärt)
-
Thread
Nochmal Frage zum Assemblerporgramm ATmega16
PORTC, an out PORTD, an nop call warten2 out PORTA, aus ;alles aus out PORTB, aus out PORTC, aus out PORTD, aus call warten2 rjmp main
Ich habe an den Fusebits das JTAGEN ausgestellt. Weil sonst der PORTc nicht funktioniert.
-
Thread
Taster Einlesen
hier mein Programm $regfile = "m8def.dat" $crystal = 3690000 Config Portb = Output Config Portc = Input Config Portc = 1 Do If Portc = 0 Then Portb = 1 Else Portb = 0 End If Loop End
Pinregistern über deren Portregister schaltet... was hälst du von diesen Zeilen: Config Pinc.5 = Input Portc.5 = 1 oder Config Pinc.5 = Input Portc = 32 oder Config Pinc.5 = Input Portc = &B00100000 Die letzten beiden Anweisungen erklären sich mit dem Artikel [[Bitmanipulation]].
-
Thread
Takte pro Befehl
Implementierung definiert, mithin auch die Semantik von (mit der üblichen Definition von POTRC): >> PORTC = 0; Zunächst wird 0 nach PORTC geschrieben. Weil "PORTC = 0" ein Ausdruck ist, der auszuwerten ist und PORTC volatile ist, wird PORTC wieder zurückgelesen, analog zu >> (void) PORTC; oder >> char a = PORTC = 0; Das alles wäre durch den Standard abgedeckt. Aber würde irgendjemand das wollen? Ich behaupte: Nein. Stell dir einfach vor, PORTC ist ein Latch. Ergo: Den Standard zu erfüllen ist nicht
-
Thread
C-Code ist Fehlerhaft
mich auch beschweren. Schreib es doch mal auseinander, vielleicht fällt Dir dann was auf? if(PORTC = PORTC | 0x40 && PORTD = PORTD | 0x80) { Wo fragst Du da was ab? Du setzt jeweils ein Bit in PORTC und PORTD... Gruß aus Berlin Michael
Inhalte von PORTC und PORTD.
-
Thread
Lüftersteuerung mit C
PORTC |=_BV(PC1); _delay_ms(19); } //LED leuchtet etwa halbhell for(i=0;i<100;i++){ PORTC &= ~_BV(PC1); _delay_ms(5); PORTC |=_BV
i<100;i++){ > PORTC &= ~_BV(PC1); _delay_ms(19); > PORTC |=_BV(PC1); _delay_ms(1); > } > > } LED jeweils 19ms an, 1ms aus -> leuchtet hell. > > return 0; Das ist nur Formalität
-
Thread
Operand 2 Out Of Range
Nebenbei: ldi r16, PortC push r16 ... pop r16 out PortC, r16 ist nicht ganz das, was dir dabei vorschwebt.
::::: pop r16 out portc, r16 rjmp Timer5W
-
Thread
T6963 Fehlerhafte Darstellung im Textmodus
call read_status btfss STA0 goto write_command btfss STA1 goto write_command ;PORTC auf Ausgang umschalten banksel TRISC movlw d'0' movwf TRISC banksel PORTC movfw command movwf PORTC bsf RD_ ;read disabled bsf CD_ ;command bcf WR_
call wait100ms ;status check call read_status btfss STA3 goto write_auto_command ;PORTC auf Ausgang umschalten banksel TRISC movlw d'0' movwf TRISC banksel PORTC movfw command movwf PORTC bsf RD_ ;read disabled bsf CD_ ;command bcf WR_
-
Thread
Atmega8 scheint UART zu empfangen
sind. Somit ist 1 gleich 0 und umgekehrt. Schmeiss das hier mal raus DDRC = 0b11111111; PORTC = 0b11111111; und stattdessen: DDRC = 0xFF; PORTC = 0x00;
MYUBRR); unsigned char zeichen; printString("Welcome AVR!\r\n"); DDRC = 0xFF; PORTC = 0xFF; _delay_ms(1000); while (1) { zeichen = receiveByte(); PORTC = PORTC << 1; //PORTC= zeichen; //printString("Test\r\n") _delay_ms(200); }
-
Thread
µController programmierung
PORTA.DIR &= ~PIN0_bm; //PORTA.0 als Eingang definiert (1.5V = 1.2A) /*Reedkontakt init*/ PORTC.DIR &= ~PIN5_bm; //PORTC.5 auf Eingang Reedkontakt PORTC.PIN5CTRL |= PORT_OPC_PULLUP_gc; //Pull-Up Widerstand am PORTC.5 aktiv (Reedkontakt) /*LEDs init*/ PORTC.DIR = 0x1C; //PORTC auf Ausgang LEDs /*PORTC.OUT &= ~ PIN3_bm; //PORTC.3 auf high WW-LEDs->aus*/ /*PORTC.OUT &= ~ PIN2_bm; //PORTC.2 auf high KW-LEDs->aus*/ /*System ON/OFF*/ PORTC.DIR |= PIN1_bm; //PORTC.1 auf Ausgang ON/OFF
-
Thread
Brauche dringend Hilfe wegen LED Matrix!
Cube-Hardware */ ISR(TIMER1_OVF_vect) { int i; TCNT1 = preload; for(i=0;i<=7;i++) { PORTC = ~(1<<i); PORTA = Array[i]; _delay_ms(1); } PORTC = ~(1<<0); PORTA = clicks; _delay_ms(1); clicks = clicks +3; } /* diverse Dinge initialisieren */ void init(void)
Das ist jetzt schon recht kompakt, das solltest du verstehen lernen. BTW: Das hier [c] PORTC = ~(1<<0); [/c] ist das selbe wie das: [c] PORTC = ~(1); [/c] ist das selbe wie das: [c] PORTC = 0xFE; [/c] Such mal das 0xFE in meinem Programm, da taucht das auch auf. Der, der
-
Thread
Library für EA-DOGM Grafikdisplays inkl. Font-Generator
pin is high), 2: backlight (on when pin is low)) #define LCD_USE_BACKLIGHT 0 #define PORT_A0 PORTC_OUT #define DDR_A0 PORTC_DIR #define PIN_A0 3 //Reset Port #define PORT_RST PORTC_OUT #define DDR_RST PORTC_DIR #define PIN_RST 2 //Backlight Port #if LCD_USE_BACKLIGHT != 0 #define PORT_LED PORTC_OUT #define DDR_LED PORTC_DIR #define PIN_LED 1 #endif //Chip select #if LCD_USE_CHIPSELECT == 1 #define PORT_CS PORTC_OUT #define DDR_CS PORTC_DIR #define PIN_CS 4 #endif
-
Thread
Bascom GrafikLCD Hilfe
+5V +5V '4 -9V Pin 5 Max 32 -C2 '5 /WR PORTC.0 '6 /RD PORTC.1 '7 /CE PORTC.2 '8 C/D PORTC.3 '9 RESET PORTC.4 '10-17 D0-D7 PORTD.0-7 '18 FS
Ach ja, hast Du JTAG deaktiviert? Wenn nicht, sind 4 Pins als I/O des PortC am Mega32 nicht zu gebrauchen. Muß man per Fuse-Bit abschalten (JTAGEN = 1 (unprogrammed)). MfG Andi
-
Thread
Initialisierung HD44780
LCD_CMD_CURSOR_SET 0x80 #define LCD_E_INIT DDRC |= 1<<PC0 #define LCD_E_SET PORTC |= 1<<PC0 #define LCD_E_CLR PORTC &= ~(1<<PC0) #define LCD_RS_INIT DDRC |= 1<<PC1 #define LCD_RS_SET PORTC |= 1<<PC1 #define LCD_RS_CLR PORTC &= ~(1<<PC1)
vorstellen, daß das geht. #define LCD_E_INIT DDRC |= 1<<PC0 #define LCD_E_SET PORTC |= 1<<PC0 #define LCD_E_CLR PORTC &= ~(1<<PC0) Warum um Himmelswillen schiebst Du die Ports? Warum für jeden PORT die gleiche vereinbarung? Worin besteht der unterschied zwischen