-
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
GCC Funktion wird manchmal nicht aufgerufen
Adresse += Spalte; //Spaltenadresse hinzufügen PORTD = Adresse; _delay_us(2); PORTC |= ((1 << PORTC7)); //Enable 1 _delay_us(50); PORTC &= ~(1 << PORTC7); //Enable 0 _delay_us(2); PORTC |= ((1 << PORTC1)); //RS auf 1 PORTD = Symbol;//Symbol schreiben _delay_us(2); PORTC |= ((1 << PORTC7)); //Enable 1 _delay_us(50); PORTC &= ~(1 << PORTC7); //Enable 0 _delay_us(2); }[/c]
-
Thread
AVR asm jmp problem
and out ldi r16, 0b000010 STORE DDRB, r16 ;configure pullups in C ldi r16, 0b001111 STORE PORTC, r16 ;led off ldi r16, 0x00 STORE PORTD, r16 loop: sbic 0x06, 0 jmp loop ldi r16, 0b011111 STORE PORTC, r16 end: jmp end [/avrasm] Der Taster ist dabei
der Reset-Leitung hinzufügen oder den internen für den Pin zuschalten indem du beim Schreiben auf PORTC 8 bit verwendest und dabei bit 6 auf 1 setzt. Also: [avrasm]ldi r16, 0b01------ ; '-' meint die obigen 6-bit-Werte STORE PORTC, r16[/avrasm] Mark
-
Thread
Klatschschalter Beschaltung
, 300 , 150 Waitms 100 Sound Portc.0 , 300 , 150 Waitms 100 Config Pinc.5 = Output Config Pinc.4 = Output Config Pinc.1 = Output Config Pinc.2 = Output Portc.1 = 1 Portc.2 = 1 Portc.4 = 1 Portc.5 = 1 Config Timer1
Then '400 ms bis 600 ms Print Firstclap Print "Licht Toggle" Toggle Portc.5 Toggle Portc.4 Portc.1 = 0 Portc.2 = 0 End If If Firstclap > 2344 Then Portc.1 = 0 Portc.2 = 1 Sound Portc.0 , 300 , 150 Waitms 500 Sound Portc.0 ,
-
Thread
einfacher C-Code funzt nicht
= 1; else PORTC = 0; Peter
Test auf einen bestimmten Bit-Wert sowie das Setzen/Löschen nur eines Bits: if (PINC & 2) PORTC |= 1; else PORTC &= ~1;
-
Thread
lcd will nicht
also so habe ich den lcd beschaltet Db4 -> Portc.3 Db5 -> Portc.2 Db6 -> Portc.1 Db7 -> Portc.0 E -> Portd.6 Rs -> Portd.5 Db0 bis Db3 auf masse pin3(LCD) und pin5(LCD)auf masse pin1 auf masse und pin2 auf 4,5 volt und
Byte $regfile = "m16def.dat" $crystal = 4000000 Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portd.6 , Rs = Portd.5 A = 55 Upperline Lcd "HALLO" Wait 1 Lowerline Wait 1 Lcd Hex(a) End getestet aber es kommt gar nicht warum
-
Thread
Zugriff auf Ports über einen Pointer od Ähnlichem für PIC18F (nicht Bit Addressierbar)
PORTE; bitmask = 1 << 6; case 11: port_ptr = &PORTE; bitmask = 1 << 7; case 12: port_ptr = &PORTC; bitmask = 1 << 4; case 13: port_ptr = &PORTC; bitmask = 1 << 5; case 14: port_ptr = &PORTC; bitmask = 1 << 6; case 15: port_ptr = &PORTC; bitmask = 1 << 7; case 16: port_ptr =
unsigned char *port; unsigned char mask; }pin_pointer; const pin_pointer pins[4] = { &PORTC, 1 << 0, // PORTC pin 0 RC0 &PORTC, 1 << 1, // PORTC pin 1 RC1 &PORTC, 1 << 2, // PORTC pin 2 RC2 &PORTC, 1 << 3, // PORTC pin 3 RC3 ... etc...
-
Thread
LCD und lesen des AC
0x05; LCD_DDR2 = 0x00; LCD_PORT1 |= (1 << E); #ifndef DEBUG _delay_us(10); #endif PORTC = LCD_PIN1; uint8_t porta = LCD_PIN1; uint8_t portb = LCD_PIN2; LCD_DDR1 = 0xFF; LCD_DDR2 = 0xFF; LCD_PORT1 = 0x00; LCD_PORT2 = 0x00; // output to PORTC (leds)
Abgesehen verstehe ich nicht, wozu das PORTC = LCD_PIN1 gut sein soll. PORTC wird doch gleich wieder umgenietet? Eigentlich kommt mir das alles auch etwas unübersichtlich vor.
-
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
GCC + Interrupt
Funktionalität auf, und es wird sich sicher jemand finden, der dir dafür ein Programmgerippe entwirft. Das geht m. M. n. schneller.
Du fragst den Eingangspegel an einem Pin ab, das als Ausgang geschaltet ist. Da kannst du gleich PORTC abfragen, es sei denn, du erwartest, dass draußen jemand einen Kurzschluss anbringt. ;-) Einfacher ist allerdings PORTC ^= 0xFF; >if (T==2000) >{ > fdevopen(uart_putc, NULL,0); > printf
-
Thread
kurzer Denkanstoß zur Pin Ansteuerung per Uart im ATMega
Byte? [code] einschalten: C12C14 -> PortC 2 an, 4 an. ausschalten: C02C04 -> PortC 2 aus, 4 aus. [/code] ist doch recht lang wenn es um alle geht. Es sollte noch verständlich sein, also nicht einfach [code] ein: C10 -> C2 C4 an
#4740515: > Was wäre eine einfache und simple Comandozeile, mit wenigen Byte? > einschalten: C12C14 -> PortC 2 an, 4 an. > ausschalten: C02C04 -> PortC 2 aus, 4 aus. > > ist doch recht lang wenn es um alle geht. Wenn es um alle geht, könnte man z.B.[pre]einschalten: C1A -> PortC alle ein. > ausschalten
-
Thread
Taster auf "1" abfragen in AVR-C
//PortB Eingänge DDRC=0xFF; //PortC Ausgänge PORTB=0xFF; //Pullup do { PORTC = 0; } while(!(PINB & (0x01))); //wenn TasterEin gedrückt { PORTC = 0x01; _delay_ms(500); PORTC = 0x02; _delay_ms(500); PORTC = 0x04; _delay_ms(500); } return 0; } [/c
)..warum? Es müsste doch alles ausgehen wegen PORTC = 0;
-
Thread
Funkübertragung über uC
)) // Abfrage Schalter Lautsprecher eingeschaltet // Aktionsmakro #define ROTE_LED_AN() { PORTC |= _BV(PC3); } // rote LED ein -> 3.3V #define ROTE_LED_AUS() { PORTC &= ~_BV(PC3); } // rote LED aus -> 0V #define GELBE_LED_AN() { PORTC |= _BV(PC1); } // gelbe LED ein -> 3.3V #define GELBE_LED_AUS() { PORTC &= ~_BV(PC1); } // gelbe LED aus -> 0V #define GRUENE_LED_AN() { PORTC |= _BV(PC2); } // grüne LED ein -> 3.3V #define GRUENE_LED_AUS() { PORTC &= ~_BV(PC2); } //
-
Thread
ATXmega32e5 SPI und Timer eliminieren sich gegenseitig?
Hallo, PORTC.REMAP = 0 PORTD.REMAP = 0 Habe ich beides.
Hallo, verste ich das richtig, dass man dann quasi keine Peripherie nutzen kann, sobald Timer auf PORTC aktiviert ist? Was haben die denn da gebaut?! Aber! Jetzt trotzdem mal eine Sache: Lässt sich denn NUR das SPI aktivieren auf PORTC? Also wenn man Timer komplett deaktiviert lässt, das geht
-
Thread
STM32 counter up/down mit Step/Dir Signalen
Geht es nur ums Mitschreiben, oder sollen die Signale im STM32F411 erzeugt werden?
Wenn man nicht programmieren will, geht auch der Vorschlag: https://www.mikrocontroller.net/topic/189888#1854601
-
Thread
Bascom / ATMega16 Problem Einsteiger
regfile = "M16def.dat" $framesize = 16 $swstack = 16 $hwstack = 16 $crystal = 1000000 Config Portc.0 = Output 'Ein Pin wird aus Ausgang konfiguriert PC0 (also Pin0 von Port C) Portc.0 = 1 'Pin wird auf High, also 5V geschaltet End Die Led ist an PC0 und natürlich GND angeschlossen
Hallo Leute, danke erstmal für eure Hilfe!! hab auch direkt probiert, also nur Config Portc.0 = Output 'Ein Pin wird aus Ausgang konfiguriert PC0 (also Pin0 von Port C) Portc.0 = 1 'Pin wird auf High, also
-
Thread
Intertechno Funksteckdosen per AVR steuern
Beim Conrad gibt es 433Mhz AM Sender. Die sind geeignet. Die RFM12 Module senden FM. Geht leider nicht. Hab schon mal probiert mit sehr hohen FM Hub den Empfänger anzusteuern. Dachte über die Resonanzkurve des Empfänger eine AM hinzubekommen. Ein AM Sender geht viel besser.
at90usb162 (Minimus: http://minimususb.com/) ansprechen. Ich komm mit avr an den bas code. PORTC0 vom mega16 entspricht PC0 vom at90usb. Strom könnte ich über die 12v bat laufen lassen (geht bestimmt auch über GND & +5v von at90usb) ABER Wie kann ich das bas umschreiben, sodass ich die
-
Thread
Schrittmotor ansteuern über Timerinterrupt
Cyberfoxx schrieb im Beitrag #2358111: > if(PORTC%2) > { > PORTC&=0xFE; > } > else > { > PORTC|=0x01; > } kann man auch so schreiben: PORTC ^=0xff warum weden alle bits von PORTC getoggelt?
stimmt! PORTC ^=0x01 wäre richtig!
-
Thread
Basic ganzen PORT A als Ausgang bzw Eingang
du es willst. If Pina.0 = 1 Then Portb.0 = 1 End If Falls der Pina.0 einmal 1 ist, geht der Portb.0 nie wieder auf 0. Bei PORTB=PINA geht jeder PORTB.x sofort wieder auf 0, wenn der PINA.x auf 0 geht. Das entsprechende für PINC und PORTD wäre dann PORTD.0=PINC.7 PORTD.1=PINC.6
Input Config Pinc.4 = Input Config Pinc.5 = Input Config Pinc.6 = Input Config Pinc.7 = Input Portc.0 = 1 Portc.1 = 1 Portc.2 = 1 Portc.3 = 1 Portc.4 = 1 Portc.5 = 1 Portc.6 = 1 Portc.7 = 1 Do If Pina.0 = 1 Then Portb.0 = 1 End If If Pina.1 = 1 Then Portb.1 = 1 End
-
Thread
Toggelgeschwindigkeit für Ports
Erstens solltest mit Optimierung übersetzen, wenn's dir drauf ankommt. Zweitens geht es auch schneller: [c] while(1) { PORTC |= ( 1 << PINC3 ); PORTC &=~( 1 << PINC3 ); PORTC |= ( 1 << PINC3 ); PORTC &=~( 1 << PINC3 ); PORTC |= ( 1 << PINC3 ); PORTC &=~( 1
<<PINC3); while(1) { PORTC = portc_l; PORTC = portc_h; PORTC = portc_l; PORTC = portc_h; PORTC = portc_l; PORTC = portc_h; PORTC = portc_l; PORTC = portc_h; } [/c] mit gut 2 CPU-Takten pro Pin-Takt
-
Thread
erster Atmega ->
'$regfile = "M8def.dat" $regfile = "M8adef.dat" Config Portc.1 = Output Config Portc.2 = Output Do Portc.1 = 0 Portc.2 = 1 Loop End
bissel Leben 'eingehaucht' $regfile = "M8def.dat" 'es handelt sich um einen ATmega8 Config Portc.1 = Output Config Portc.2 = Output Do Portc.1 = 0 Portc.2 = 1 waitms 500 Portc.2 = 0 Portc.1 = 1 waitms 500 Loop End da iss es nitt so monoton (monolicht) vlG
-
Thread
Gaswarnanlage Tiefgarage
> PORTC = 0b00000001 ich wüsste nicht, dass es in C geht (Binäre schreibweise)..
pcb schrieb im Beitrag #1919832: >> PORTC = 0b00000001 > > ich wüsste nicht, dass es in C geht (Binäre schreibweise).. Tja, dann hast du wohl gerade wieder was gelernt... (Es geht beim avr-gcc, auch wenn das eine Nicht-Standard-Erweiterung
-
Thread
myAVR-LCD-Fragen
enable(); DDRC |= (1<<PC0); PORTB |= (1<<PB0); while((PIND & 0x80) == 0x80) { PORTC |= (1<<PC0); asm volatile("nop"); enable(); } DDRC = 0; PORTB &= ~(1<<PB0); PORTC &= ~(1<<PC0); }[/c] funktioniert leider immernoch nicht. PortB.0 ist übrigens R/W
1 << PD3); DDRC |= (1<<PC0); PORTB |= (1<<PB0); while((PIND & 0x80) == 0x80) { PORTC |= (1<<PC0); asm volatile("nop"); } PORTD &= ~(1 << PD3); DDRC = 0; PORTB &= ~(1<<PB0); PORTC &= ~(1<<PC0); }[/c]
-
Thread
10LED PWM auf Atmega8, wie gehts besser?
Hi, ich bin neu hier und auch ziehmlich unerfahren im programmieren von Microcontrollern. Mit ein bisschen klauen hier und da habe ich mir mein erstes PWM-Prog geschrieben. 10 LEd werden über ein Array angesteuert, das den ablauf vorgibt (Chase, Still, Fading etc). Wichtig war mir vorallem, das es äuserst Variabel ist, denn die programmierung soll für verschiedene situationen angepasst werden können. Allerdings denke ich das es endlos optimiert werden könne, ich hab nur kein plan wie. Stoßt mich bitte in die richtge richtung :-) Hier mein Code: #define F_CPU 8000000 #define
-
Thread
LCD zeigt nichts an
Datenbus DB4-DB7, das unterste Bit DB4 kann auf den Portbits 0..4 liegen // LCD DB4-DB7 <--> PORTC Bit PC0-PC3 #define LCD_DB PD0 // LCD Steuersignale RS und EN // LCD RS <--> PORTC Bit PC4 (RS: 0=Data, 1=Command) #define LCD_RS PD4 // LCD EN <--> PORTC
Das hier [C] // LCD Steuersignale RS und EN am Control Port // LCD RS <--> PORTC Bit PB2 (RS: 0=Data, 1=Command) #define LCD_RS PB2 // LCD EN <--> PORTC Bit PB0 (EN: 1-Impuls für Daten) #define LCD_EN PB0 [/c] ist Ernst zu nehmen! Überall,
-
Thread
Starten eines Programmes Atmega8
Led5 Alias Portb.4 Led6 Alias Portb.5 Led7 Alias Portc.0 Led8 Alias Portc.1 Led9 Alias Portc.2 Led10 Alias Portc.3 Taster Alias Portc.4 'Einlesen des Tasters Do If Taster = 1 Then
Led5 Alias Portb.4 Led6 Alias Portb.5 Led7 Alias Portc.0 Led8 Alias Portc.1 Led9 Alias Portc.2 Led10 Alias Portc.3 Taster Alias Portc.4 'Einlesen des Tasters Do If Taster = 1 Then Led10 = 0 End
-
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
KS0108B Displaytech 64128A
mal kurz über Deine Schaltung geschaut. Dazu ein paar Anmerkungen: - Ich würde statt PortB den PortC nehmen (außer Du hast was wichtiges mit PortC vor, z.B. du nutzt JTAG). Denn über PortB programmierst Du vermutlich den AVR, Wenn Du das Display an PortC anschließt, bitte JTAG in den Fusebits
nochmal einen Reset ausgeführt, das hab ich bei mir nicht. Nimm das mal raus und probier ob es dann geht. Gruß
-
Thread
if Abfrage in main() ignoriert?
Testzwecken schaltet man mal da mal da ein LED ein oder aus. Funktioniert auch alles so weit. Es geht um die Anweisung. Ich weiß ein wenig aus dem Zusammenhang gerissen, der restl. Code befindet sich im Anhang. Es handelt sich um die Zeile. [c]if(Second==5) PORTC ^= (1<<PC1);[/c] Das komische
static uint8_t _20_ms=0; _20_ms++; if (_20_ms == 50) { Second++; _20_ms = 0; PORTC ^= (1<<PC0); } } [/c] Du setzt jedes mal wenn du in die ISR kommst deinen Wert von _20_ms auf Null. Dann geht er ja schon nie in die if Abfrage in deiner ISR. Wie sollte dann Second jemals
-
Thread
Strukturierte AVR-Assembler-Programmierung Gesperrt
in LEDport,PORTC eor LEDport,bitmask ; toggle masked LED position out PORTC,LEDport IF LEDcnt == #7 ldi bitmask,0b00_0001 ; reload bitmask ELSE lsl bitmask
in LEDport,PORTC eor LEDport,bitmask ; toggle masked LED position out PORTC,LEDport IF LEDcnt == #7 ldi bitmask,0b0010_0000 ; reload bitmask ELSE lsr
-
Thread
entprellen.bekomme es nicht richtig hin.
void) { // **** Einrichten von Ein- und Ausgängen *************** DDRC = 0x01; // PortC 0 Ausgänge PORTC1-6 Eingänge PORTC |=0x02; // Pull Up an PortC0 und 1 aktivieren } char taster(void) { static unsigned char zustand; char rw = 0; if(zustand == 0 && !(TASTERPORT
durchaus gerne 1000 und 1 mal die selben Fragen beantwortet, wenn es um seinem eigenen Entprellen-Code geht.
-
Thread
Taster mit LED Dauer, Blinken
Taster 3 mal drücken - LED aus. Mein Problem ist folgendes: wenn ich den Taster 1 mal drücke geht die LED an. Beim 2. drücken blinkt die LED, geht aber nie mehr aus der Schleife raus, ich kann also so oft drücken wie ich will, es ändert sich nix mehr. Wo liegt der Fehler? Vielen Dank für Eure
{ PORTC &=~(1<<PC0); _delay_ms(500); PORTC |=(1<<PC0); _delay_ms(500); } if (i==3) { PORTC &=~(1<<PC0); } } return(0); }
-
Thread
Interrupt Atxmega 32 A4U
funktionieren. Im Prinzip habe ich einen gravierenden Fehler entdeckt. Falsch, hier wird nicht PIN 6 von PORTC konfiguriert: PORTC_PIN1CTRL, temp ;PORTC PIN6 Pull-Up und Interrupt bei fallender Flanke Hier wird ganz klar bei PIN1 und damit PORTC PIN1 der Pullup und Interrupt bei fallender Flanke gesetzt
PORTC_INTCTRL, temp ;Interrupt Level (low) ldi temp, 0b01000000 sts PORTC_INT0MASK, temp ;PORTC PIN6 auf INT0 sei ldi temp, 0b00000111 sts PMIC_CTRL, temp ldi
-
Thread
Rückgabe von Getkbd() - BASIC
nee die funktion geht ohne getkey und ist viel besser
Query_matrix() ' Abfrage der Tastaturmatrix If Key <> 0 Then Portc.0 = 1 Waitms 1000 Portc.0 = 0 Waitms 1000 Elseif Key = 5 Then Portc.0 = 1 Waitms 100 Portc.0 = 0 Waitms 100 'Ss = Mid(s , Key , 1) 'Print "Taste " ;
-
Thread
Flash Speicher sparen
zu machen. Dazu eine Verständnisfrage. Was verbraucht weniger Speicher A [c] MAIN: ... PORTC |= (1 << PC5); ... PORTC |= (1 << PC5); ... PORTC |= (1 << PC5); ... PORTC |= (1 << PC5); [/c] B [c] void schaltePortC(void) { PORTC |= (1 << PC5); } ... MAIN: ... schaltePortC
kürzeste Version müsste A) sein, weil der Compiler daraus ein sbi = 1 Word machen sollte. Kürzer geht nicht.
-
Thread
Atmel Studio: "Standard" SW-Routinen aus einem Pool verwenden
geht das nicht mit .include C:\Pool\...
[3] = 0x00000003; PORTC->PCR[4] = 0x00000003; PORTC->PCR[5] = 0x00000003; PORTC->PCR[6] = 0x00000700; PORTC->PCR[7] = 0x00000700; PORTD->PCR[4] = 0x00000100; PORTD->PCR[5] = 0x00000100; PORTD
-
Thread
INT1 klappt, INT0 nicht.
PORTC = (0 << PC4) | (0 << PC5); _delay_ms(50); PORTC = (0 << PC4) | (1 << PC5); _delay_ms(30); PORTC = (0 << PC4) | (0 << PC5); _delay_ms(50); PORTC = (0 << PC4
PORTC = (0 << PC4) | (0 << PC5); _delay_ms(50); PORTC = (1 << PC4) | (0 << PC5); _delay_ms(30); PORTC = (0 << PC4) | (0 << PC5); _delay_ms(50); PORTC = (1 << PC4
-
Thread
Xmega Pin Zustand effizient spiegeln
Flanke ein Durchlauf des DMA_CH0 Interrupts EVSYS.CH0MUX = EVSYS_CHMUX_PORTC_PIN2_gc; // Pin auswählen EVSYS.CH0CTRL = EVSYS_DIGFILT_8SAMPLES_gc; // Ausgangspins vorbereiten und richtigen Pegel ausgeben PORTC.DIRSET = PIN3_bm | PIN5_bm; if (PORTC.IN & Pin2_bm) PORTC.OUTSET = PIN3_bm | PIN5_bm; else PORTC.OUTCLR = PIN3_bm | PIN5_bm; // reset DMA controller DMA.CTRL = 0; DMA.CTRL = DMA_RESET_bm; while ((DMA.CTRL & DMA_RESET_bm) != 0); // configure
-
Thread
C-Programm für ATmega8 läuft ohne PC-Anschluss nicht
sec==tc); DDRB = 0xff; //PORTB als Ausgang für Speaker und LED DDRC = 0x00; //PORTC als Eingang für Taster zum Stellen der Weckzeit PORTC = 0xff; //PullUp-Widerstände an PORTC ein volatile char h, m; lcdGoto(2,1); lcdWrite("Wecker: : "
Vermutlich geht die Spannung der Batterie in die Knie und der Brown-Out Reset schlägt zu. Welches Board ist das? Schaltplan?
-
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
3x3x3 LED Matrix - einzelne Ebenen ansteuern
'nachfoldend: alle Spalten auf high Portc.0 = 1 Portc.1 = 1 Portc.2 = 1 Portc.3 = 1 Portc.4 = 1 Portc.5 = 1 Portc.6 = 1 Portc.7 = 1 Porta.7 = 1[/c] Zeile 11, 12 und 13 bewirken nichts, egal, ob ich sie auskommentiere oder nicht!
m32def.dat" $framesize = 32 $swstack = 32 $hwstack = 32 $crystal = 1600000 $baud = 9600 Config Portc = Output Config Portb = Output Dim Col As Byte Dim Row As Byte Do For Col = 0 To 7 Config Porta = Input Portc = 0 Portb = 0 Portc.col = 1 If Col = 7 Then
-
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
deklaration mit define,wie richtig, so doch nicht oder?
PORTC #define TASTER_PIN PINC #define TASTER_DDR DDRC #define TASTE_LINKS PC0 #define TASTE_RECHTS PC1 #define TASTE_ENTER PC7 #define LED_PORT PORTC #define LED_DDR
[/C] und durch Anwenden aller Textersetzungen entsteht für den Compiler dann der Code [C] PORTC &= ( 1<<PC2 ); [/C] welches er in eine "Clear Bit 2 an PORTC"-Assembler-Instruktion übersetzt.
-
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
Assembler - Funktionen in C einbinden
Test-Prog auch mit normalen Labels ausprobiert und es funktionierte. Anscheinend lag das Problem an out PORTC,temp erzetzt durch out _SFR_IO_ADDR(PORTC),temp. Das kann ich allerdings nicht ganz nachvollziehen da in der io.h bzw. in der iom16.h PORTC schon mit der adresse ersetzt wird: #define PORTC _SFR_IO8
Schleifenanfang. > Das kann ich allerdings nicht ganz nachvollziehen da in der io.h > bzw. in der iom16.h PORTC schon mit der adresse ersetzt wird: > #define PORTC _SFR_IO8(0x15) Wenn Du Dir jetzt noch die Definition von _SFR_IO8() ansiehst, kannst Du es vielleicht eher nachvollziehen. :-) Diese Definitionen
-
Thread
SPI zwischen zwei AtMega8
PORTD |= (1<<PD6); } } void changeDigitToOnAndOthersOff(int digit){ if(digit == 1){ PORTC |= (1<<PC0); PORTC &= ~((1<<PC1) | (1<<PC2) | (1<<PC3)); }else if(digit == 2){ PORTC |= (1<<PC1); PORTC &= ~((1<<PC0) | (1<<PC2) | (1<<PC3)); }else if(digit == 3){ PORTC |= (1<<PC2); PORTC &= ~((1<<PC0) | (1<<PC1) | (1<<PC3)); }else if(digit == 4){ PORTC |= (1<<PC3); PORTC &= ~((1<<PC0) | (1<<PC1) | (1<<PC2)); } } void multiplexDigits(){ if(multiplexCount
-
Thread
Taktfrequenz messen
ldi r16, 0xF0 out DDRC, r16 ldi r16, 0xF0 out PORTC, r16 loop: ldi r16, 0xF0 out PORTC, r16 ldi r16, 0x00 out PORTC, r16 rjmp loop Ist das so zu verstehen, das mein Mega128 mit mageren 1,5 Mhz läuft?
.include "m128def.inc" ldi r16, 0xF0 out DDRC, r16 ldi r16, 0xF0 out PORTC, r16 loop: ldi r16, 0xF0 ;1 Takt out PORTC, r16 ;1 Takt ldi r16, 0x00 ;1 Takt out PORTC, r16 ;1 Takt rjmp loop ;3 Takte ;------- ;
-
Thread
Abfrage Taster durch USI vom Slave mit zwei AVR
(byte4 == 30) { // Wenn Wert 30 gelesen wurde... PORTC &= ~( (1<<PINC5)); // schalte Port A6 PORTC |=(1<<PINC6); // wenn nicht lösche Port A6 } else { PORTC |=(1<<PINC5); // wenn
(byte4 == 30) { // Wenn Wert 30 gelesen wurde... PORTC &= ~( (1<<PINC5)); // schalte Port A6 PORTC |=(1<<PINC6); // wenn nicht lösche Port A6 } else { PORTC |=(1<<PINC5); // wenn
-
Thread
c code optimierung ev. assembler?
void DAC_Output(uint16_t val){ // converts 12Bit to the DA Converter if(val & (1<<8)){ PORTC |= (1<<3); } else{ PORTC &= (~(1<<3)); } if(val & (1<<9)){ PORTC |= (1<<2); } else{ PORTC &= (~(1<<2)); } if(val & (1<<10)){ PORTC |= (1<<1); } else
in POSTC. Dazu verwendest du rel. umfangreiche if/else Konstruktinen. Wie wäre es, die Bits iN PORTC geschickter zuzuordnen,damit die Reihenfolge identisch ist 8-11 => 0-3? Und dann über [[Bitmanipulation]] mit einer Bitmaske die 4 Bits auf einen Streich zu setzen? Ähnliches geht vielleicht auch beim
-
Thread
gr. LCD testcode need help
z[60]; uint16_t c; SIGNAL(SIG_OVERFLOW0) { unsigned char a,i,j; TCCR0=(0<<CS00); if(PORTC&0b00000100) PORTC |= (0<<PC2); else PORTC |= (1<<PC2); if(PORTD&0b00000100) PORTD |= (0<<PD2); else PORTD |= (1<<PD2); PORTD |= (1<<PD1); for(i=0;
> Und geht dein Display nun? Kann ich mir nicht vorstellen zb PORTC |= (0<<PC2); else PORTC |= (1<<PC2); Da fehlts an den allereinfachsten Basics. Und genau darum ist ein GLCD 5 Schuhnummern