-
Thread
SPI atmega8 interrupt
enable SPI and Master mode SPCR=0x50; while(1){ //transmit data to first controller PORTC&=~0x01; SPI_Transmit('a'); PORTC|=0x01; _delay_ms(100); PORTC&=~0x01; SPI_Transmit('b'); PORTC|=0x01; _delay_ms(100); PORTC&=~0x01; SPI_Transmit('c'); PORTC|=0x01; _delay_ms(100); PORTC&=~0x01; SPI_Transmit('d'); PORTC|=0x01; _delay_ms(100); PORTC&=~0x01; SPI_Transmit('e'); PORTC|=0x01; _delay_ms(100);
-
Thread
ATMega8, Timer1, CTC, ISR wird nur einmal aufgerufen
) { DDRC |= (1<<DDC0); // Ausgang für LED PORTC &= ~(1<<PORTC0); // LED zu Beginn auschalten timer_init(); // Timer initialisieren lcd_init(); // LCD initialisieren sei(); // Interrupts global aktivieren while
) { DDRC |= (1<<DDC0); // Ausgang für LED PORTC &= ~(1<<PORTC0); // LED zu Beginn auschalten timer_init(); // Timer initialisieren lcd_init(); // LCD initialisieren sei(); // Interrupts global aktivieren while
-
Thread
Ansteuerung einer 7-Segment-Anzeige mit ATmega8 funktioniert nicht mehr
zum YEAH-Erzeugen: PORTB = 0b00010001; PORTC = 0b00100000; PORTD = 0b00000001; _delay_ms(3); PORTB = 0b00100100; PORTC = 0b00100000; PORTD = 0b00000010; _delay_ms(3); PORTB = 0b00000000; PORTC = 0b00110000
Probiers mal so: [c] PORTB = ((PORTB & 0b11000000) | bwert); PORTC = ((PORTC & 0b11001111) | cwert); [/c] Stichworte: logische Verknüpfung und bitweise Verknüpfung.
-
Thread
Anfängerfrage: LCD-Modul TC1602A-09 4Bit Modus an Atmega32, Code + Belegung
$regfile = "m32def.dat" $crystal = 16000000 Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.5 , Rs = Portc.4 Waitms 50 Initlcd Config Lcdbus = 4 Config Lcdmode = Port Do Cls Locate 1 , 1 Lcd "Hallo" Locate 2 , 1 Lcd
$regfile = "m32def.dat" $crystal = 16000000 Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.5 , Rs = Portc.4 Config Lcdbus = 4 Config Lcdmode = Port Waitms 50 Initlcd Waitms 50 Do Cls Locate 1 , 1 Lcd "Hallo" Locate
-
Thread
LCD - ich verzweifele
YL162-90) 16*2. Angesteuert über folgenden Codeschnipsel [code] $regfile = "M8def.dat" Config Portc.3 = Output Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portb.0 , Rs = Portd.7 Config Lcd = 16 * 2 Do Lcd "Hallo Welt!" Toggle Portc.3 Waitms 1000
*2. > Angesteuert über folgenden Codeschnipsel > [code] > $regfile = "M8def.dat" > > Config Portc.3 = Output > Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , > Db7 = Portd.3 , E = Portb.0 , Rs = Portd.7 > Config Lcd = 16 * 2 > > Do > Lcd "Hallo Welt!" > Toggle Portc
-
Thread
ATmega16 IO-Pins Konfiguration
[Pre] $regfile = "m16def.dat" $crystal = 8000000 ';;;;LCD-Initialisierung Rw Alias Portc.5 'Alias für den RW pin am LCD Helligkeit Alias Portc.7 'Alias für den Pin zur Steuerung der Helligkeit der LCD-HIntergrundbeleuchtung
Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.6 , Rs = Portc.4 Config Lcd = 20 * 2 Initlcd 'Cursor Off Cls ';;;; ';;;;Encoder-Initialisierung Config Portb.2
-
Thread
LED einzeln an per Funktion
break; case 1: PORTB |= (1 << LEDNr); break; case 2: PORTC |= (1 << LEDNr); break; case 3: PORTD |= (1 << LEDNr); break; } } [/c]
Doch doch, Ausschalten geht auch mit meiner Variante, zumindest bei PortA und PORTC bei PORTD geht garnichts mit dieser Variante, nichtmal einschalten :(
-
Thread
Funkprotokoll dekodieren
Datar = 0 Bitzahler = 1 Config Pinb.0 = Input Portb.0 = 1 Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 , E = Portc.1 , Rs = Portc.0 Config Lcd = 16 * 2 Do Cls If Bitcount = 3 Then Datar.bitzahler = 0 'Wenn nur 3 high
-
Thread
reihenfolge der bits in einem byte umdrehen
festgestellt, dass der aktuelle WinAVR mit -OS ein riesen Schrott erzeugt! [c] unsigned char Val; Val= PORTC; Val = (Val&0xF0)>>4 | (Val&0x0F)<<4; Val = (Val&0xCC)>>2 | (Val&0x33)<<2; Val = (Val&0xAA)>>1 | (Val&0x55)<<1; PORTC=Val; [/c] Wird zu: [c] Val= PORTC; IN R18,0x15 In from
immediate LSL R25 Logical Shift Left OR R25,R24 Logical OR PORTC=Val; OUT 0x15,R25 Out to I/O location [/c]
-
Thread
Anpassung TCP-IP Stack
uip_arp_timer(); //arptimer = 0; zaehler = 0; } } else { PORTC |= (1 << 2); if(BUF->type == HTONS(UIP_ETHTYPE_IP)) { PORTC |= (1 << 3); uip_arp_ipin(); uip_input(); if(uip_len > 0) { PORTC |= (1 << 4); uip_arp_out(); enc28j60PacketSend(uip_len,uip_buf); } } else if(BUF->type == HTONS(UIP_ETHTYPE_ARP)) { uip_arp_arpin();
-
Thread
Hilfe Eieruhr
Hier mal den Code den ich bis jetzt habe: $regfile "m8def.dat" $crystal = 8000000 Config Portc.1 = Output Config Portc.2 = Output Config Portc.3 = Output Config Portb.0 = Input Portb.0 = 1 Declare Sub Keypressed Dim W As Byte Do Debounce Pinb.0 , 0 , Keypressed , Sub Select Case W Case 1 : Portc.1 = 1 Case 2 : Portc.1 = 1 Portc.2 = 1 Case 3 : Portc.1 = 1 Portc.2 = 1 Portc.3 = 1 Case Else : Portc.1 = 0 Portc.2 = 0 Portc.3 = 0 End Select Loop Sub Keypressed Incr W
-
Thread
pwm-soft
for(counter=0x00;counter<0xffff;counter++) { if (compare<counter) { PORTC=0x10; } } PORTC=0x00; } } void fadeout(void) { for(compare=0x00;compare<0xffff;compare++) { for(counter=0x00;counter<0xffff;counter++) { if (compare<counter) { PORTC=0x10; } } PORTC=0x00; } } int main (void) { DDRC = 0xff; while(1) { fadein(); fadeout(); } return(0);
-
Thread
Transistor und Atmega88
Ausgangs eines Atmega88 ein Transistor ansteuern .wäre die schreibweise so richtig oder nicht? PORTC = (1 << DDC3); Transistor ein PORTC &= ~(1<<PC3); Transistor aus Danke Aron
Aron schrieb im Beitrag #2065716: > PORTC = (1 << DDC3); Transistor ein > PORTC &= ~(1<<PC3); Transistor aus so reicht es aus: PORTC = (1 << 3); Transistor ein PORTC &= ~(1 << 3); Transistor aus
-
Thread
max232 budrate und quarz
m16def.dat" $framesize = 16 $swstack = 16 $hwstack = 16 $crystal = 16000000 $baud = 9600 Config Portc.0 = Output Config Portc.1 = Output Config Pinc.2 = Input Config Pina.7 = Input Porta.7 = 1 Do If Pina.7 = 1 Then Portc.0 = 1 Print "Schalter nicht gedrückt" Else Portc.0 = 0 Print "Schalter gedrückt" End If Portc.1 = 0 If Pinc.2 = 1 Then Portc.1 = 1 Print "nicht" Else Portc.1 = 0 Print "doch" End If Wait 1 Loop End
-
Thread
ATMega 32 bleibt stehen
//Port C auf Output schalten DDRD = 0xff; //Port D auf Output schalten PORTC = 0x00; //Port C löschen PORTD = 0x00; //Port D löschen //Timer TCNT1H = 0xCF; //Wert für einen Timebase von 1ms TCNT1L = 0x2B; TCCR1B &=~(0<<CS12); //Einstellung
Int_Counter = 40; //Counter aufziehen } if (Int_Counter == 20) { PORTC = Int_Merker; } if (Int_Counter == 0) { PORTD = Int_Merker; } if (Int_Counter > 0) { --Int_Counter; } }
-
Thread
Bascom Atmel Mega 16 Problem mit Timer und Portc
Werte funktionieren ja, und laut Fehlermeldung > sollte ja auch 64 verwendet werden können ... PortC hat eingeschränkte Funktionalität weil JTAG aktiv ist und einige Pins von PortC daher nicht als normale I/Os genutzt werden können. Wie man das deaktiviert, steht im Datenblatt des Mega16!!!
Timer1 geht, aber das ist ja das kleiner Problem, die SW kann ich noch ändern. Aber portc ist vom Layout der Platine jetzt festgelegt. Port c lässt sich in Bascom als Ausgang definieren: config portc = output Allerdings bleibt der Ausgang nach "reset portc.3" weiterhin height!
-
Thread
Problem mit delay.h und Optimierungsstufe v. AVR Studio 4
Idle geändert, die paar mA die ich da spar^^. Noch mal zum Verständnis. Muss es anstatt: [c]PORTC &= ~((1<<PC0) | (1<<PC1));// Turn Laser off[/c] so heißen: [c] PORTC &= (~(1<<PC0) | ~(1<<PC1));// Turn Laser off[/c] ? Aber iwie passt das doch nicht. Denn hier ein kleiner Auszug aus dem
sein. Du wirst schon wissen was Du da tust :) > Noch mal zum Verständnis. Muss es anstatt: > PORTC &= ~((1<<PC0) | (1<<PC1));// Turn Laser off > so heißen: > PORTC &= (~(1<<PC0) | ~(1<<PC1));// Turn Laser off > ? Nein! Die erste Variante ist schon richtig. Oder halt so, wenn man unbedingt zuerst
-
Thread
Unerklärliche Ausgabe beim Multiplexen
Segmentanzeigen anzeigen. Die Anzeige wird mit folgender ISR gelöst: [c] ISR(TIMER0_OVF_vect){ PORTC=0; show(display[pos]); PORTC|=(1<<pos); if(pos==0&&einspeisen==1) PORTD&=~(1<<7); if(pos==1&&powered==1) PORTD&=~(1<<7); pos++; if(pos>3) pos=0; } [/c] Die Variable
display[i] = SegCodes[ iWert % 10 ]; iWert /= 10; } } ISR(TIMER0_OVF_vect) { PORTC = 0; PORTD = display[pos]; PORTC |= (1<<pos); // das sollte man auch ersetzen. 1<<pos ist eine üble Operation // Bit 7 dimmen, je nachdem ob einspeisen bzw powered 1 sind ergibt das
-
Thread
Atmel AVR 168 xplained Mini Code funkt nicht
durchgang vorhanden ist. Wenn ja, dann LED an: int main(void) { DDRC = 0b00000000; PORTC = 0xFF; DDRD = 0b10111111; PORTD = 0x00; while(1) { if (!(PORTC & (0b00000001))) { PORTD |= (1 << PORTD5); }
Hallo, Knut schrieb schon einiges. Noch mal klarer: dies führt zu PortC als Eingang mit Pullup on. [c]DDRC = 0b00000000; PORTC = 0xFF;[/c]
-
Thread
Problem mit Subroutine CALL-RET.
r16,0xFE out DDRB,r16 main: ldi r21,0x08 ldi r16,0xFE sec main5: out PORTC,r16 rol r16 call delay out PORTC,r21 call delay rjmp main5 delay: ldi r18,0x04 ldi r19,0xFF ldi r20,0xFF L1: dec r20 brne L1 dec r19
r16,0xFE out DDRB,r16 main: ldi r21,0x08 ldi r16,0xFE sec main5: out PORTC,r16 rol r16 call delay out PORTC,r21 call delay rjmp main5 delay: ldi r18,0x04 ldi r19,0xFF ldi r20,0xFF L1: dec r20 brne L1 dec r19
-
Thread
wieder mal MAX7219 (Problem mit Programm oder Schaltung?)
Daten senden while(1){ PORTC = 0xAA; // LEDs blinken im wechsel _delay_ms(500); PORTC = 0x55; _delay_ms(500); }; return 0; } [/c]
Digit 1 auf Zahl 1 SPI_Transmit(0x02,0x02); // Digit 2 auf Zahl 2 while(1){ PORTC = 0xAA; // LEDs blinken im wechsel _delay_ms(500); PORTC = 0x55; _delay_ms(500); }; return 0; } [/c]
-
Thread
Touchscreen Routine, in C = Problem!
<= 41)) { Glcd_Rectangle(8,19,60,43,0); if (gedruckt_BUTTON1 == 0) { if(PORTC.F6 == 0) { PORTC.F6 = 1; Glcd_Box(10,21,58,41,2); CopyConst2Ram(msg,msg7); // Copy "RC6 ON " string to RAM Glcd_Write_Text(msg,14,4,0); CopyConst2Ram
y_coord64 <= 41)) { Glcd_Rectangle(68,19,120,43,0); if (gedruckt_BUTTON2 == 0) { if (PORTC.F7 == 0) { PORTC.F7 = 1; Glcd_Box(70,21,118,41,2); CopyConst2Ram(msg,msg4); // Copy "BUTTON2" string to RAM Glcd_Write_Text(msg,74,3,0);
-
Thread
Stepper
lassen wollte, msste ich dann nur die Werte in der Tabelle umdrehen? (hier Halfstep) PORTC = 0x03; schlaf(1); PORTC = 0x01; schlaf(1); PORTC = 0x09; schlaf(1); PORTC = 0x08; schlaf(1); PORTC = 0x0C; schlaf(1); PORTC = 0x04; schlaf(1); PORTC = 0x06; schlaf(1); PORTC = 0x02; schlaf(1); Also z.B. aus PORTC = 0x03 wird dann PORTC = 0xFC ??? Also das dann immer ganz genau umgekehrt angesteuert wird...? 02
-
Thread
Schalten mit AT90S8535
A -> LED 0 an PORTC leuchtet (und leuchtet weiter wenn ich den taster loslasse) Ich drücke Taster0 an PORT B -> LED0 an PORTC erlischt und LED0 an PORT D leuchtet (und leuchtet weiter wenn ich den taster loslasse)
gelehrt werden, dann könnte man auch solche einfachen Logikgleichungen aufstellen: for(;;){ PORTC = PINA | PORTC & ~PORTD; PORTD = PINB | PORTD & ~PORTC; } Peter
-
Thread
verwunderter C - Anfänger
[c] #include <avr/io.h> #define TAKT 14745600UL void main (void) { DDRC = 255; PORTC = 0; while(1) { warte16( ); PORTC++; } } void warte16(void) { unsigned long i; for (i = 0; i < 200000; i++); } [/c] dieser kleine Dualzähler funktioniert so
sollte, wenn i nicht als volatile deklariert ist). Wenn man sie hinter "PORTC++" schreibt macht er das nämlich schon. Wenn man bei warte16() das inlining abschaltet, wird sie in beiden Fällen (vor/hinter PORTC++) tatsächlich auch aufgerufen, besteht aber nur aus "ret".
-
Thread
Attiny 1616 Hardware-Interrupt
anderer angewiesen. würde es in etwa um so etwas gehen wen ich es richtig verstanden habe. ISR(PORTC_PORT_vect) { PORTC.OUT ^= (1 << 0); PORTC.INTFLAGS |= (1 << 5); }
Stefan W. schrieb im Beitrag #7552062: > ISR(PORTC_PORT_vect) { > PORTC.OUT ^= (1 << 0); > PORTC.INTFLAGS |= (1 << 5); > } Genau, so würdest du das machen können. Vorher musst du aber natürlich noch den PC5 konfigurieren und den entsprechenden
-
Thread
Port benennen
umständlich gelöst? Beim PIC geht das meiner Meinung nach viel intuitiver. PORTCbits.RC2=1; vs. PORTC|=(1<<PC2); PORTCbits.RC2=0; vs. PORTC&=~(1<<PC2); if(PORTCbits.RC2) vs. if(PINC&(1<<PINC2))
Pascal schrieb im Beitrag #3669535: > PORTC|=(1<<PC2); dann schreib PORTC|=_BV(PC2);
-
Thread
4-Byte zu 1-Byte
Besser wirds mit PORTA = (uint8_t) (Zahl & 0xFF); PORTB = (uint8_t) ((Zahl >> 8) & 0xFF); PORTC = (uint8_t) ((Zahl >> 16) & 0xFF); PORTD = (uint8_t) ((Zahl >> 24) & 0xFF);
PORTE = (numdat); PORTA = (uint8_t) (start<<3) & 0xFF); PORTB = (uint8_t) (start>>5) & 0xFF); PORTC = (uint8_t) (start>>13) & 0xFF); PORTD = (uint8_t) (start>>21) & 0xFF); PORTA = (uint8_t) (ende<<3) & 0xFF); PORTB = (uint8_t) (ende>>5) & 0xFF); PORTC = (uint8_t) (ende>>13) & 0xFF); PORTD =
-
Thread
Hilfe Ports lassen sich nicht beschalten
---------------------------------------- ziffer_0: movlw b'00011111' movwf PORTC call delay clrf PORTC movlw b'00101001' movwf PORTC call delay clrf PORTC movlw b'01001001' movwf PORTC call delay clrf PORTC movlw b'10001111' movwf PORTC call delay clrf PORTC btfsc PORTB,7 goto main goto ziffer_0
-
Thread
Atmega16 100kHz Encodersignal
PORTC=((PORTC&0xC3)|encodervalue[i] ... Da musst Du den Port erstmal lesen, mit c3 verunden, encodervalue lesen, mit dem vorangegangenen verodern und dann in Port schreiben, das sind schon einige Schritte
schreib doch einfach direkt in Port, sind ja nur 4 Zustände, ergo 4 Zeilen Code, zur Not in ASM out PORTC, 0xirgendwas
-
Thread
Wo liegt mein Denkfehler
Hi, ich habe folgendes kleines Programm geschrieben: [c] void Schalter1 (void) { PORTC &= ~(1<<PORTC0); // Bit 0 loeschen, LED an _delay_ms(2000); PORTC |= (1 << PORTC0); // Bit 0 setzen, LED aus } void Schalter2 (void) { PORTC &= ~(1<<PORTC1); // Bit 0 loeschen, LED an
Anfänger schrieb im Beitrag #2883737: > void Schalter1 (void) > { > > PORTC &= ~(1<<PORTC0); // Bit 0 loeschen, LED an > _delay_ms(2000); > PORTC |= (1 << PORTC0); // Bit 0 setzen, LED aus > } Ist das nicht PC0 und nicht PORTC0? Bekommst du Warnungen oder sonst
-
Thread
Probleme beim Code
= 2; } tuerlinkstastertimer = 2; tuerlinkstasterstrom = 1; PORTC |= (1<<PC4); _delay_ms(600); PORTC &= ~ (1<<PC4); tuerlinkstasterstatus = 2; tuerlinkstasterstrom = 0; } } // Rechts
2; } tuerrechtstastertimer = 2; tuerrechtstasterstrom = 1; PORTC |= (1<<PC2); _delay_ms(600); PORTC &= ~ (1<<PC2); tuerrechtstasterstatus = 2; tuerrechtstasterstrom = 0; } } /////
-
Thread
2x 7 Segment Anzeige - Multiplexen mit HF lässt Board ausgehen?
sevenseg_show_mp(int number); void main(void) { DDRD = 0xff; PORTD = 0xff; DDRC = 0xff; PORTC &= ~(1<<PC4); PORTC |= (1<<PC5); while(1) { sevenseg_show_mp(4); PORTC ^= (1<<PC4); PORTC ^= (1<<PC5); sevenseg_show_mp(5); PORTC ^= (1<<PC4); PORTC
-
Thread
Timer des AVR (GCC-Tutorial)
sekunde++; millisekunden=0; PORTC = ~PORTC; //Zustand des Port C invertieren } }[/c]
millisekunden=0; PORTC = ~PORTC; //Zustand des Port C invertieren } }[/c]
-
Thread
Zeitraffer Programm (Probleme mit UART)
= 0; } else PORTC &=~(1<<PC2); s2eightmicroseconds++; if (s2eightmicroseconds >= s2microvelocity){ PORTC |=(1<<PC4); asm("nop"); asm("nop"); asm("nop"); asm("nop"
asm("nop"); asm("nop"); s1eightmicroseconds = 0; } else PORTC &=~(1<<PC2); s2eightmicroseconds++; if (s2eightmicroseconds >= s2microvelocity){ PORTC |=(1<<PC4); asm("nop"); asm("nop"); asm("nop"); asm("nop"
-
Thread
XMega SPI Verbindung zu SD-Karte
Hallo, MMC_Direction_REG PORTC.DIR SDCARD_MISO 6 ist in der mmc.h definiert. Hast du alle PORTD gegen PORTC ausgewechselt? Schau mal mit der Suchfunktion nach, es darf in der mmc. und mmc.h kein PORTD mehr geben. Verwendest
Ja habe alles auf PORTC gestellt. Ich verwende AVRStudio 4, warum? Gruss Farin_94
-
Thread
SPI-Problematik (Daten Übertragung und andere Portc gestört)
setzen, dann SPI_MasterInit(), dann sei überhaupt Ausgabe von SPDR möglich */ // Ausgänge auf PORTC, für Diagnose oder andere Anwendungen denkbar DDRC = 0xff; PORTC = 0xff; while(1) { SPDR = 0xAF; /* so gehts einigermaßen, nur zum testen, auch mit Abfrage von while(!(SPSR & (1<<SPIF))); keine "Besserung" in Sicht. Im ersten Sinne nur Ausgabe nötig */ PORTC = 0xff; // Keine SPI Ausgabe mehr auf MOSI, nach PORTC Zugriff set_SS_X(3); // SS setzen SPI_MasterTransmit('B'); // Wird nicht an SPDR "gemeldet" unset_SS_X(3); } }
-
Thread
Probleme mit ATMega16, PORTC macht was er will!!??
aber es geht nicht. Hab an PORTC ein Display hängen, das ich ansteuern will, aber mein PORTC macht, was er will *wunder*. Bekomme, wie schon gesagt, noch nicht mal alle PINS auf 0V. :-/ Wenn ich obiges Programm auf en µC pack, und dann die PINS an PORTC messe, mess ich folgendes: PC0: 0V PC1: 0V PC2: 5V PC3: 5V PC4: 0,2V (???) PC5: 5V PC6: 0V PC7: 0V Kann mir jm. bei meinem Problem helfen? Wie bekomm ich den PORTC dazu, zu machen, was ich
-
Thread
Drehgeber code
ich einen konstanten Ausdruck, den Du da einsetzen sollst. Wenn z.B. der eine Pin (A) Pin 5 auf auf PORTC ist, und der andere Pin (B) Pin 5 auf PORTD ist: OldEncoderValue = ((PORTC >> 5) & 0b0000001) | ((PORTD >> 4) & 0b00000010)) Falls B auf Pin 1 liegt, kannst Du den Shift-Operator auch weglassen
und wenn B auf Pin 0 liegt, musst Du stattdessen um 1 nach links schieben OldEncoderValue = ((PORTC >> 5) & 0b0000001) | (PORTD & 0b00000010)) und OldEncoderValue = ((PORTC >> 5) & 0b0000001) | ((PORTD << 1) & 0b00000010)) Programist schrieb im Beitrag #2212446: > Ausserdem > warum ist da
-
Thread
Interrupt mit atmega8
ISR(INT0_vect) { PORTC = PORTC << 1; } [/code]
while(1) { } } ISR(INT0_vect) { PORTC = PORTC << 1; }[/code]
-
Thread
Zwei defines verbinden
Aber so wird das nicht dastehen: [c] #define BLA { PORTA = 0xff; PORTB = 0x00; } #define BLUBB PORTC = 0xaa; if(x) BLA wird zu: if(x) { PORTA = 0xff; PORTB = 0x00; } if(y) BLUBB wird zu: if(y) PORTC = 0xaa; [/c] Es gibt keinen Grund ein "{ .... };" irgendwo hinzusetzen, ausser bei
Programmänderung steckt. * im Falle, dass ein Makro tatsächlich nur 1 Statement substitiert #define BLA PORTC &= (1<<PC0) #define BLUBB PORTC |= (1<<PC0) muss es nämlich if(x) BLA; else BLUBB; heissen! D.h. die Syntax in der Verwendung richtet sich plötzlich danach, was konkret
-
Thread
Atmega Ports "durchzählen"
) { DDRA = 0xff; //PORTA als Ausgang DDRC = 0xff; //PORTC als Ausgang PORTA = 0xff; //Alle LEDs aus PORTB = 0xff; //Alle LEDs aus while (1) { PORTA = 0x01; PORTC = 0x01; long_delay
for (j=0; j<5; j++) { for (i=0; i<4; i++) { z <<= 1; PORTC = z; long_delay(300); } PORTC = 0x01; s <<= 1; PORTA = s; long_delay(300); z = 1; } } return 0; } [/
-
Thread
Pin-Zustand von PIC16LF722 ändert sich zufällig
einzelnen Pins. Auch das habe ich gemacht, aber weder Konstrukte wie unsigned char port; port = PORTC | (1<<4); PORTC = port; noch so simple Sachen wie PORTC |= (1<<4); funktionieren richtig - es ändern sich immer andere Pins noch mit. Liegt das eventuell am Compiler? Der generierte Assembler-Code
CALL 0x7e8 39: PORTC &= ~(1<<4); 01D 30EF MOVLW 0xef 01E 00F5 MOVWF 0x75 01F 1283 BCF 0x3, 0x5 020 1303 BCF 0x3, 0x6 021 0875 MOVF 0x75, W 022 0587 ANDWF
-
Thread
interrupt nutzen
initialisieren (Alle LEDs aus, restliche Bits passend für Input und Tristate) DDRC = 0x18; PORTC = 0xFF; DDRD = 0x7C; PORTD = 0x7C; // Timer/Counter 0 initialisieren: CTC Modus, Prescaler 1/1024, Interrupt-Intervall 10 ms TCCR0A = (1<<WGM01); TCCR0B = (1<<CS02)|(1<<CS00
passend für Input und Tristate) DDRC = 0x18; PORTC = 0xFF; DDRD = 0x7C; PORTD = 0x7C; // Timer/Counter 0 initialisieren: CTC Modus, Prescaler 1/1024, Interrupt-Intervall 10 ms TCCR0A = (1<<WGM01); TCCR0B = (1<<CS02)
-
Thread
1V am Ausgangsport des Atmega8
out PORTD, r16 ; Aktivieren der Pullup-Widerstände an Port D ldi r16, 0b00010000 out PORTC, r16 ; Aktivieren des Pullup-Widerstände an Pin 4 Port C Sollte doch passen oder? Gruß, Russell
einen Eingang und 6 Ausgänge konfiguriert habe und ich dann ein Register auf dem Port ausgebe (out portc, r16). Was passiert da mit meinem Eingang? Danke nochmal. Gruß, Russell
-
Thread
128x64 Grafik LCD An Atmega 8/16/32
schließe ich an PortA an meinem STK500 an. Der Rest der Leitungen wie D/I, R/W und CS1/CS2 liegt an PortC an.
spreche LCD an out PORTC,buffer ;sende Daten cbi PORTA,E ;disable LCD ret ;*************************************************************** ; Subroutine write_instr ; Diese Routine sendet Befehle zur
-
Thread
Ausgang wird nicht gesetzt
C Anschluß 5 als Ausgang definieren while(1){ if (PINB & (1 << PB0)){ PORTC = PORTC & (1 << PC5); } else{ PORTC = PORTC & (1 << PC5); / } PORTC = (1 << PC5); } } Danke schon mal im Vorraus.
PORTC = (1 << PC5); und hier ist PORTC |= (1 << PC5); die richtige Wahl > > } > }
-
Thread
ATmega8: LEDs leuchten, wenn ich mit dem Finger nur in die Nähe komme!
$crystal = 1000000 $hwstack = 16 $swstack = 20 $framesize = 40 'Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 , E = Portc.1 , Rs = Portc.0 Config Pind.0 = Input 'Schalter EIN/AUS Config Pind.1 = Input
-
Thread
if - verschachteln - aber wie?
x_temp_ist <= y_temp_soll) && (!(PINC & (1<<WB)))) { //Fahre ins Wärmebad PORTC &= ~(1<<CW); PORTC |= (1<<CCW); while(!(PINC & (1<<WB))){} //solange ins Wärmebad fahren bis Anschlagtaster erreicht ist } else if ((x_temp >= z_temp_soll) && (!(PINC & (1<<KB)))) { //Fahre ins Kälteebad PORTC &= ~(1<<CCW); PORTC |= (1<<CW); while(!(PINC & (1<<KB))){} //solange ins Kältebad fahren bis Anschlagtaster erreicht ist } else{ PORTC &= ~(1<<CW); PORTC &= ~(1<<CCW);
-
Thread
Timer 0 mi ATmega8
habt eine Idee! Liebe Grüße, Jan [c]ISR (TIMER0_OVF_vect){ //timer0 overflow vector PORTC |= (1<<PC1); } int main(void){ DDRC |= (1 << DDC1); //Set direction register for pc1 PORTC = 0x00; //set outputs initially to zero //Timer initialization TIMSK = (1<<TOIE0); //
/io access #include <avr/interrupt.h> ISR (TIMER0_OVF_vect){ //timer0 overflow vector PORTC |= (1<<PC1); } int main(void){ DDRC |= (1 << DDC1); //Set direction register for pc1 PORTC = 0x00; //set outputs initially to zero //Timer initialization TIMSK = (1<<TOIE0); //