-
Thread
ISR viel zu mollig
könntest du den CTC Modus des Timers benutzen. Dazu ist er schliesslich da. Und wenn du anstatt PORTC ^= (1 << PHI_2); die scheinbar längere Variante if( PORTC & ( 1<<PHI_2 ) ) PORTC &= ~( 1<<PHI_2 ); else PORTC |= ( 1<<PHI_2 ); wählst, ermöglichst du dem Compiler die Benutzung
Karl Heinz Buchegger schrieb im Beitrag #2920074: > die scheinbar längere Variante > if( PORTC & ( 1<<PHI_2 ) ) > PORTC &= ~( 1<<PHI_2 ); > else > PORTC |= ( 1<<PHI_2 ); > > wählst, ermöglichst du dem Compiler die Benutzung der Port-Bitbefehle, > was ihn dann wiederrum nicht
-
Thread
Unklarheiten bei einem C Programm
Warum schreibt man denn PORTC = (0<<DDC0); anstelle PORTC = 0;
optimiert das weg. Aber der Schreiber / Leser des Codes kann so ausdrücken um welches Bit es ihm geht. Und genau diese hier so oft gescholtene, müffelige Zeile zeigt den Grund, warum das vorteilhaft ist: [c]PORTC = (0<<DDC0);[/c] So kann man schon beim Lesen des Codes erkennen, dass der Autor hier
-
Thread
UHR- if-bedingung
>wenn ein PullUP eingeschaltet ist, dann wird diese mit PORTC = (1 << >PC3); wieder abgeschaltet. Nur zum Verständnis: PORTC = ( 1 << PC0); entspricht PORTC = b'0000 0001' dadurch schalte ich mein Pull-up Widerstand ab, also muss ich PORTC = ( 1
steht, ist ein Ausgang, bei einer 0 ist das Bit ein Eingang. Für die Eingangsbits: Wenn du auf PORTC schreibst, bedeutet ein 1-Bit, daß der Pullup eingeschaltet wird und ein 0-Bit, daß der Pullup aus ist. Für die Ausgangsbits: Ein 1-Bit bedeutet, daß der Ausgang auf 1 (also HIGH) geht, ein 0-Bit
-
Thread
Outreg aus gemischten Port Pins
uint16_t)PORTB);PORTB = outreg; > MixPins = (outreg >> 8); > Danke und Gruss > Firebird Das geht natürlich nicht! Ich denke ich habs jetzt verstanden, PORTC und PORTD haben je ein 8 Bit register; die einzelnen Pins der jeweiligen Ports kann man nicht kombinieren. Ok, jetzt weiss ich nicht weiter
outreg; > outreg = outreg >> 8; > PORTD = PORTD | 0xFC; > PORTC = PORTC | 0x03;[/c] > > Jetzt müsste es nach meinem Kenntnisstand stimmen. > Mache ich ein Durcheinander? Kurze Zwischenfrage: Wie genau geht denn jetzt bei dir der Wert von outreg in das ein
-
Thread
Anfänger fragen zur Programmierung des Atmega32A in C
für was steht? Frage 3: Ist PORTC &= 255-_BV(0); die kurzfassung von PORTC = PORTC & 255-_BV(1); Frage 3.1: Was macht diese Bitmanipulation? Und wie kommt es dazu das dadurch der pin auf 0 gesetzt wird? Frage 3.2: Ist PORTC
Nachschlagewerk was mir erläutert, welche zahl für > was steht? Wie oben beschrieben. Wenn es darum geht eine Dezimalzahl aus einem Port auszugeben, musst du immer Binär denken. [c] // Alle diese Befehle machen genau das selbe! PORTC = 255; // Dezimale Schreibweise PORTC = 0xFF; // Hexadezimale
-
Thread
DS18S20 wird vom ATmega8 nicht gefunden
swstack = 64 $framesize = 64 Config Lcd = 20 * 4a , Chipset = Ks077 Config Lcdpin = Pin , Db7 = Portc.0 , Db6 = Portc.1 , Db5 = Portc.2 , Db4 = Portc.3 , E = Portc.4 , Rs = Portc.5 Initlcd Config 1wire = Portd.7 Const Ds18s20 = &H10 Const Skiprom = &HCC
m8def.dat" $crystal = 8000000 Config Lcd = 20 * 4a , Chipset = Ks077 Config Lcdpin = Pin , Db7 = Portc.0 , Db6 = Portc.1 , Db5 = Portc.2 , Db4 = Portc.3 , E = Portc.4 , Rs = Portc.5 $hwstack = 40 $swstack = 40 $framesize = 60 Declare Sub Temperatur_aus_ds18b20 Declare Sub Temperatur_aus_ds18s20
-
Thread
Lochraster Projekt?
Portb.4 = 1 Waitms 10 Portb.4 = 0 Waitms 10 Portb.5 = 1 Waitms 10 Portb.5 = 0 Waitms 10 Portc.0 = 1 Waitms 10 Portc.0 = 0 Waitms 10 Portc.1 = 1 Waitms 10 Portc.1 = 0 Waitms 10 Portc.2 = 1 Waitms 10 Portc.2 = 0 Waitms 10 Portc.3 = 1 Waitms 10 Portc.3 = 0 Waitms 10 'Knight Rider Vorlauf 10 LED´s Portc.1 = 1 Waitms 10 Portc.1 = 0 Waitms 10 Portc.0 = 1 Waitms 10 Portc.0 = 0 Waitms 10 Portb.5 = 1 Waitms 10 Portb.5 = 0 Waitms 10 Portb.4 = 1 Waitms 10 Portb.4 = 0 Waitms 10 Portb
-
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
Bit setzen in C Gesperrt
einfach mal ohne dem Shift. Denn der Compiler macht nur dass was du ihm sagst. Versuchs so: PortC |= 0x10; //Bit 5 setzen Und das Löschen von Bit5 geht so: PortC &= 0xEF; //Bit 5 löschen Wenn du dir dass im Kopf Ausrechnen erspahren willst, dann verwende doch einfach den Windowstaschenrechner
>Nu sag ich nix mehr ;-)) Macht ja nichts, inzwischen geht es ja auch um die Vorgabe einer sinnvolle Grösse für Maustreiber.... ;-)
-
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
Warum geht das nicht ?
ist, denn dein LCD benutzt zufällig zwei Leitungen des JTAG Ports. Das (JTAG Enable und Port I/O) geht leider nicht zusammen.
denn > dein LCD benutzt zufällig zwei Leitungen des JTAG Ports. Das > (JTAG Enable und Port I/O) geht leider nicht zusammen. Danke das war das Problem, das hatte oben auch schon jemand geschrieben, aber so schnell bin ich nicht, Danke.
-
Thread
Library für EA-DOGM Grafikdisplays inkl. Font-Generator
ja passt, hatte das falsch verstanden, dachte das geht irgendwie an wenn man Text aus gibt.. aber das geht ja gar nicht wie blöd von mir :(
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
Servoansteuerung mit Timer (ATmega32)
Mit dem 10µs delay gehts nicht -> erhöht auf 50µs zu ungenau :( Wie wäre da dann der Code? mfg thomas
int main(void) { DDRC |= 1 << PINC0; //Status LED 1 aktivieren PORTC &= ~(1<<PINC0); DDRC |= 1 << PINC1; //Status LED 2 aktivieren PORTC |= 1<< PINC1; //Timer 1 - 20ms TCCR1B |= 1<<CS11 | 1<<WGM12; //Prescaler: -> 50Hz OCR1A = 40000
-
Thread
AVR Anfang / Flash geht aber Programm scheint nicht zu laufen
CK3 heißen auf 0 gesetzt und jetzt spricht der Mega8 nicht mehr > mit mir "reset to default geht auch nicht" ;-(((
Posting https://www.mikrocontroller.net/topic/424250?reply_to=4961949#4961849 bedeutet, dass es nicht geht. Dieses https://www.mikrocontroller.net/topic/424250?reply_to=4961949#4961927 hingegen, dass es geht; zumindest das Verifying. Was trifft jetzt zu? Am besten versuchst Du einfach mal die Fuses
-
Thread
LED Multiplexing
(Geht das nachträgliche Einfügen von Bildern gar nicht?)
7,5mA und LED3 mit 1mA betrieben wird Wenn es sich bei den LEDs um gleichfarbige handelt: Nein, geht nicht, stand so auch nicht in der Aufgabenbeschreibung. Wenn es um verschiedenfarbige geht: Natürlich geht das, daher ja 3 getrennte Kreise und die Möglichkeit alle einer Farbe abzuschalten.
-
Thread
kanns Assembler schneller als Bascom!?
habe einen AVR, auf dem läuft unter bestimmten vorraussetzungen folgender code: if pind.2=0 then portc.1=0 else portc.1=1 endif 16-17 takte habe auch schon portc.1=pind.2 ca 12 takte versucht. Leider ist der code einen tick zu langsam. Geht es in assembler schneller??
Sebastian wrote: > Geht es in assembler schneller?? Ja !
-
Thread
Assembler Programm zu umständlich
kommt ggf. noch der CRT0-Startcode aus der C-Bibliothek. Muss ja, wegen Stack. [c] PORTC = (PORTC & 0x0f) | i; // Ausgabe von i auf PORTC[0..3] [/c] Die unteren 4 bits sollen ausgeblendet werden, oder ? [c] PORTC = (PORTC & 0xf0) | i; // Ausgabe von i auf PORTC[0..3] [/
den Stack-Pointer mit 0 initialisieren. Die neueren setzen ihn stattdessen auf RAMEND. > PORTC = (PORTC & 0x0f) | i; // Ausgabe von i auf PORTC[0..3] > > Die unteren 4 bits sollen ausgeblendet werden, oder ? > > PORTC = (PORTC & 0xf0) | i; // Ausgabe von i auf PORTC[0..3] Ja
-
Thread
LCD KS0073 am AVRATMega128
.7 kein Wunder das es bei dir nicht geht. Sonst müsste alles OK sein!
Hab auch so ein ähnliches problem... das display schaltet sich für ca. 2-3 sekunden an und geht dann 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
Operand 2 Out Of Range
::::: pop r16 out portc, r16 rjmp Timer5W
Gast wrote: > Also geht mal an alle hier .. nicht immer mit ngativen kommentaren > kommen wenn anfänger hier mal ein Code posten!!!! Darum gehts nicht. Aber so wie das Programm aussieht, wärs vielleicht mal ganz gut
-
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
J. S. schrieb im Beitrag #7281457: > 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 damit ich mich darauf > verlassen kann. Wäre doch gut, wenn
-
Thread
HILFE Seltsames Verhalten Atmega 328P auf Arduino-Board mag Code nicht
im Beitrag #6342462: >> RS liegt auf PC4, EN auf PC4. Tipfehler! (RS = Register select) <-> PORTC PortBit 4 (EN = Enable) <-> PORTC PortBit 5
der 44870 noch busy ist. Hier ist bei einem Lo auf D7 des LCD frei. Ich mache die Abfrage über Pin5 PORTC. Offensichtlich klapp hier die Abfrage nicht. So das die Routine die Bussy checkt in eine Endlosschleife geht. Ich habe diese Abfrage durch ein delay von 0,5ms ersetzt und das ganze läuft nun fehlerfrei
-
Thread
einfache Schreibweise um Pins zu schalten
#define pinc0_ein PORTC |= (1 << 0)
Baut man das dann aber in ein if-else-konstrukt ein: if(x>y) SR_latch(); else ++x; geht es nicht: da dann steht: if(x>y) {PORTC |= (1<<0); PORTC &= ~(1<<0);}; else ++x; das semikolon schließt die if-Anweisung unwiederuflich. Daraus lernt man 2 sachen: 1. Macros, die
-
Thread
Ist mein µC schnell genug?
) { PORTC &= ~( (1<<phase1m) | (1<<phase2m) | (1<<phase3p) | (1<<phase1p) ); PORTC |= ( (1<<phase2p) | (1<<phase3m) ); MCUCSR |= ( 1<<ISC2); } if(pPWM == 0) { PORTC
) { PORTC &= ~( (1<<phase1m) | (1<<phase2m) | (1<<phase3p) | (1<<phase1p) ); PORTC |= ( (1<<phase2p) | (1<<phase3m) ); MCUCSR |= ( 1<<ISC2); } if(pPWM == 0) { PORTC
-
Thread
Drehzahlmesser 4 mal 7-segment mit 90S2313
mal ne farge zur ZDiode da.... bekomm ich dann net ne fehlzündung wenn die spannung drüber geht?!
Impulse As Byte Dim V As Long Dim W As Long Dim W1 As Long Dim W2 As Long Dim W3 As Long Config Portc = Output Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 , E = Portc.1 , Rs = Portc.0 Config Timer1 = Timer , Prescale = 256 , Capture Edge
-
Thread
Schrittmotor nicht linear ansteuern
TCNT0=0xFF; InPort = (((PIND & 0b00111100) >> 2) ^ 0b1111) ^ Cfg_InversIn; OutPort = (PORTC & 0b00111111) |((PORTB & 0b00000011)<<6); if (Step) { PORTC = portc;// ^ InversC; // Jetzt geht alles raus
TIM0_OVF] void timer0_ovf_isr(void) { TCNT0=0xFF; if (Step) { PORTC = portc;// ^ InversC; // Jetzt geht alles raus if (portc & P_Step) // wir haben einen Schritt gemacht
-
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
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.
mal Hilfe: Ich habe drei rs485-terminals: WR, PC, M328 Senden M328-PC und M328-WR und PC-WR geht. Empfangen PC-WR, M328-PC(Bild1) geht. Empfang M328-WR(Bild 2 +3)kommt kein brauchbares Signal. Woran kann das liegen? Ist der Adapter unbrauchbar?
-
Thread
Probleme bei Programmausführung
)) { PORTC = 0x00; } else // 1 < zaehler < 31 { PORTC = an; _delay_ms(80); PORTC = andersrum; _delay_ms(50); PORTC = 0x00;
rücksetzen PC1 setzen halten < 0,1s PORTC ganz aus. kurze Pause (länger als 0,5s) dies 3-4 mal nahcdem PORTC ganz aus ist PC0 setzen. (extrem kurz) PC0 rücksetzen PC1 setzen (extrem kurz) PORTC ganz aus. danach geht es dann
-
Thread
LCD zeigt nur Balken an, weis nicht mehr weiter;)
Mach es mal anders herum: Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.4 , Db6 = Portc.5 , Db7 = Portc.1 , E = Portc.2 , Rs = Portc.0 Config Lcd = 16 * 2 MfG Paul
.4 , Db5 = Portc.5 , Db6 = Portc.6 , > Db7 = Portc.7 , E = Portc.2 , Rs = Portc.0
-
Thread
Atmega 8 + dallas 18s20 + Neuling (never ending story)
mit Timern und Interrupts ankommen. Wenn die Erkennung vom IC funktioniert sag Bescheid, dann geht es weiter.
nicht etwa das bit PC5 auf 0, sondern setzt > alle anderen Bits in PORTC auf 0, und bei PC5 kommt es darauf an ob es > vorher in PORTC gesetzt war. Wenn es gesetzt war bleibt es danach noch > immer auf 1, ansonsten bleibt es auf 0. Das ist auf jeden Fall nicht > das,
-
Thread
Bitmanipulation optimieren
sicherlich noch Optimierungsbedarf und ich würde euch gerne um entsprechende Tipps bitten. Konkret geht es um Folgendes: Ich arbeite hier 74HC237 (3-to-8 line decoder with latches). Alles wichtige hängt an PORTC, nämlich PC2, PC3 und PC4 sind die Adresspins (A0 - A2). PC5 ist das Latch Enable (LE) Signal
Falk Brunner schrieb im Beitrag #3051778: > layer += 4; > PORTC &= ~(_BV(PC2) | _BV(PC3) | _BV(PC4)); > PORTC |= layer; > > PORTC |= _BV(PC5); ergänzend: [c] PORTC |= layer | _BV(PC5) ; [/c] somit: [c] layer += 4; PORTC &= ~(_BV
-
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
ATMega 64, ALL AVR, Anfänger Problem
DDRC 0x34. Moemntan scheitert es daran das ich die PortBITS nicht einzeln setzen kann [c] PORTC0 = V1_1; PORTC1 = V1_2; PORTC2 = V2_1; PORTC3 = V2_2; PORTC4 = V3_1; PORTC5 = V3_2; PORTC6 = Kranz_an; PORTC7 = Kranz_LR; PORTA0 = ML_Z; PORTA1 = MR_Z; [/C] Muss ich da statt
DDRC 0x34. > > Moemntan scheitert es daran das ich die PortBITS nicht einzeln setzen > kann > PORTC0 = V1_1; > PORTC1 = V1_2; > PORTC2 = V2_1; > PORTC3 = V2_2; > PORTC4 = V3_1; > PORTC5 = V3_2; > PORTC6 = Kranz_an; > PORTC7 = Kranz_LR; > > PORTA0 = ML_Z; > PORTA1 = MR_Z; >
-
Thread
UART LED anschalten und halten
Rechner ein Zeichen senden (also 8bit) und wenn der Controller dieses empfängt, soll er eine LED an PortC anschalten. Geht auch alles, nur bleibt die LED nicht an. Er empfängt, die LED blitzt auf und geht wieder aus und ich weiß nicht warum. Wenn ich die zweite While-Schleife wegnehme, bleibt die LED
dann eher klar, wo mein Problem liegt: [c] while(1) { if (UDR !=0x00) PORTC = 0x01; } [/c]
-
Thread
AVR: unsigned 24 bit auf 3 Ports verteilen
// ok, OUT PORTA,Rn PORTB = ((wert >> 8) & 0xff); // 4 Register werden sinnlos umkopiert PORTC = ((wert >> 16) & 0xff); // ok, OUT PORTC, Rn+2 } machmal(0x00112233UL); Der gcc läuft mit -o3 Wie gehts besser ? Union etc. geht nicht, weil ich alles in Registern behalten will. Gruß
sinnlos umkopiert d4: 82 e2 ldi r24, 0x22 ; 34 d6: 85 b9 out 0x05, r24 ; 5 PORTC = ((wert >> 16) & 0xff); // ok, OUT PORTC, Rn+2 d8: 81 e1 ldi r24, 0x11 ; 17 da: 88 b9 out 0x08, r24 ; 8 } [/c]
-
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
Hilfe beim Uhr programmieren
1000000 $baud = 19200 $hwstack = 32 $swstack = 10 $framesize = 40 Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portb.4 , E = Portc.4 , Rs = Portc.5 Config Lcd = 16 * 2 Config Lcdbus = 4 Cursor Off Config Portb.0 = Output Config Portb.5 = Output Config Portb
ein neues an [pre] $regfile = "m8def.dat" $crystal = 1000000 Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portb.4 , E = Portc.4 , Rs = Portc.5 Config Lcd = 16 * 2 Config Lcdbus = 4 Cursor Off Config Adc = Single , Prescaler = Auto Dim Messung As Word
-
Thread
Atmega8515 Alternative Portadressierung
< (rand() & 7); else if (tmp == 1) PORTB ^= 1 << (rand() & 7); else if (tmp == 2) PORTC ^= 1 << (rand() & 7); else PORTD ^= 1 << (rand() & 7); } [/c] zumindest, wenn "^=" in C existiert... Wenn C das kann geht auch ein [c] switch (rand() & 3) ... [/c] Bin mir aber
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
Taster & LED am selben Port schon wieder.
Noch immer wer macht die LED aus. while(1){ if ( !(PINC & (1<<PINC7)) ) { PORTC |= (1<<PC0); } else { PORTC &= ~(1<<PC0); } }
nicht reagieren... > Unter C Helmi wrote: > while(1){ > if ( !(PINC & (1<<PINC7)) ) { > PORTC |= (1<<PC0); > } else > { > PORTC &= ~(1<<PC0); > } > } So... nun ersetze mal diese Schleife mit allem darin durch PORTC |= (1<<PC0); Wenn die LED dann nicht leuchtet, liegt
-
Thread
Craft
Bild 2bit. Damit sind also 64 Farben möglich. Ich habe es mit 330 + 680 Ohm Widerstände nachgebaut, geht auch. PortC 5: R1 PortC 4: R0 PortC 3: G1 PortC 2: G0 PortC 1: B1 PortC 0: B0 PortD 7: Sound5 PortD 6: Sound4 PortD 5: Sound3 PortD 4: Sound2 PortD 3: ??? (sieht nach PWM oder sowas
weitgehend meiner Vermutung. Das mit dem SPI war mir neu. Port-C könnte auch wie folgt belegt sein PortC 5: B0 PortC 4: G0 PortC 3: R0 PortC 2: B1 PortC 1: G1 PortC 0: R1 Das beschleunigt das Einschieben von Farbinformationen, die nur das obere Bit nutzen sollen - reine Spekulation.
-
Thread
Array an 7 Segmentanzeige ausgeben
Code für die Printnumerberfunktion: [C] void printnumber(char* zahl, uint8_t unter0) { PORTC |=0x06; SevenSegment(zahl[3], 0); PORTC = (1<<PC0); _delay_ms(3); PORTC |=0x06; SevenSegment(zahl[2], 0); PORTC = (1<<PC1); _delay_ms(3); PORTC |=0x06; SevenSegment(zahl[1], 0); PORTC = (1<<PC2); _delay_ms(3); PORTC |=0x06; SevenSegment(zahl[0], 0); PORTC = (1<<PC3); _delay_ms(3); } [/C]
-
Thread
LEDs leuchten leicht bei 8x8 Register PWM
Portb.1 = 1 Waitus 50 Portb = 0 Portc = 0 Portc.0 = 0 Porta.0 = 1 Porta.0 = 0 Portb.2 = 1 Waitus 50 Portb = 0 Portc = 0 Portc.0 = 0 Porta.0 = 1 Porta.0 = 0
Portb.5 = 1 Waitus 50 Portc = 0 Portc.0 = 0 Porta.0 = 1 Porta.0 = 0 Portb.6 = 1 Waitus 50 Portb = 0 Portc = 0 Portc.0 = 0 Porta.0 = 1 Porta.0 = 0
-
Thread
<< -Verständnisproblem
Bit) auf das Port Register zu ver-oder-n um damit genau dieses eine Bit zu setzen. Ob du PORTC |= 64; PORTC |= 0b01000000; PORTC |= ( 1 << 6 ); schreibst, ist gehupft wie gesprungen. Es passiert immer das gleiche: Das Bit 6 am PORTC wird auf 1 gesetzt. Nur in der letzten Schreibweise
kannst eine 0 noch so oft hin- und herschieben, es wird nur eine 0 bleiben. Was passiert also? [c]PORTC = PORTC & 0;[/c] PORTC wird auf 0 gesetzt, aber vorher noch einmal eingelesen... > Oder muß ich schreiben > PORTC &= ~(1<<Ausgang_3)? Genau so.
-
Thread
AtMega16 Bascom PWM. Ist sowas möglich?
oohhh neiiiin! Geht das überhaupt mit einem atmega16 die Frequenz zu erzeugen?
Hi Alex, also mit diesem Beispiel geht die Frequenz hoch und runter : $regfile = "M8def.dat" $crystal = 1000000 Drehzahl Alias Portc.5 Config Drehzahl = Output Dim Timervorspannung As Long Timervorspannung = 50 Config Timer0
-
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
Frage zu C-Syntax
> sbit(PORTC,0); PORTC |= (1<<0); > sbit(DDRD,4); DDRD |= (1<<4); > cbit(PORTD,4); PORTD &= ~(1<<4); > Frage: Was machen diese beiden define Statements? Definieren Makros (Regeln) für den
Verhalten (und der einen oder anderen kleinen Erweiterung für Spezialsachen, wenns gar nicht anders geht) Auch dein BASCOM muss ja letztendes bei SET Portc.0 für den µC die entsprechenden Assembler-Anweisungen generieren. Ob du nun SET Portc.0 oder PORTC |= ( 1 << PC0 ); schreibst
-
Thread
atmega32 Ports kaputt?
Zeig deine Software, sonst geht hier gar nichts.
. Aber diesmal nicht die Kabel kreuz und quer, sondern vom 7805 gehts auf die beiden waagrechten Verteiler und von dort gehts mit kurzen! Brücken auf die jeweiligen IC-Pin Schienen im Steckbrett Den Programmer wild zu verdrahten ist schon ok, das geht nicht anders
-
Thread
Probelme bei einem Programm
0b00001010 ;Vergleich mit Maske "S1 && !S2 && S3" breq led_ein ;Springe zu "LED einschalten" sbi portc, 0 ;LED an PORTC.0 aus rjmp loop led_ein: cbi portc, 0 ;LED an PORTC.0 ein rjmp loop
;Vergleich mit Maske "S1 && !S2 && S3" breq led_ein ;Springe zu "LED einschalten" sbi portc, 0 ;LED an PORTC.0 aus rjmp loop led_ein: cbi portc, 0 ;LED an PORTC.0 ein rjmp loop Ich verzweifel langsam noch.. sich das selber beizubringen ist nicht so einfach wie ich
-
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.
Ja, sie leuchtet einmal auf, und geht wieder aus
-
Thread
Quelltext bleibt immer stehen und geht nicht weiter
; DDRC = 0x00; PORTC = 0xff; while(1) { qwe = PINC; // 1 if (qwe == 0b00000001); { // lcd_string("1"); } .... } [/c]
den Fehler gefunden es war das == zwischen qwe und 0b.. jetzt habe ich nur noch ein gleich und es geht.