-
Thread
Nochmal Analog Comparator
ISR: /* INTERRUPTHANDLER Analog Comparator */ SIGNAL(SIG_COMPARATOR) { if(bit_is_set(PORTC,PC2)) cbi(PORTC,PC2); else sbi(PORTC,PC2); } In der main dann sei() und Endlosschleife.
2 und 3) als Eingang (AIN= und AIN1) */ cbi(DDRB,PB2); cbi(DDRB,PB3); /* Massebezug (Portc, Pin 2) für Sensor einschalten: Output, "0"*/ sbi(DDRC,PC1); cbi(PORTC,PC1); /* SPEZIELLE SETTINGS FÜR ANALOG COMPARATOR ======================================== */
-
Thread
Lcd Tutorial Pin Änderung
gehe ich mal davon aus, daß es sich um einen Atmega32, 644 oder sowas handelt. Bei denen liegt auf PORTC die JTAG-Schnittstelle. Die ist werksseitig eingeschaltet. Du musst die entsprechende Fuse umschalten. Ist ein sehr beliebter Fehler, wenn PORTC nicht funktioniert.
programmieren, kann ich das da über die FUSES ausschalten oder funktioniert das dann allgemein nicht an PORTC ? davon habe ich wirklich leider keine Ahnung
-
Thread
Mehrfachbedingungen in defines?
ganz verstanden aber es hat mich auf ne Idee gebracht. [c] volatile unsigned char* x_Port[] = { &PORTC, &PORTC, &PORTC, &PORTC, &PORTC, &PORTC, &PORTD, &PORTD, &PORTD, &PORTD, &PORTD }; unsigned char x_Pin[] = {PC7, PC6, PC5, PC4, PC3, PC2, PD7, PD6, PD5, PD4, PD3}; int main(void) { DDRA = 0x7F; DDRB = 0x0F; DDRC = 0xFC; DDRD = 0xF8; PORTA = 0x7F; PORTB = 0x0F; PORTC = 0x00; PORTD = 0x00; int wert; while(1) { for (wert = 0; wert <= 10; wert++) { *x_Port[wert] |= (1<<x_Pin[wert]);
-
Thread
Bascom Avr Code
= 7 then Portc.0=0 & Portc.1 = 1 Wäre schön wenn mir jemand weiterhelfen könnte.
If ((var1 = 1) And (var2 = 2) And (var3 = 7)) Then Portc.0 = 0 Portc.1 = 1 else Portc.0 = 1 Portc.1 = 0 End If würd so schreiben zumintest wenn du die ports nicht vorher definierst zwecks pegel. ungleich = <> zu finden neben der linken shifttaste
-
Thread
Timer ungleichmässig
== 0xFF) { signal_wait1 = 0; if(PINC&(0<<PC5)) // Abfrage PortC PC5 LED 5 Grün leds_set_status(1,5); // schaltet LED 5 Grün auf ein else leds_set_status(0,5); // schaltet LED 5 Grün auf aus } } return 0; } PINC & .. ist
Achim Seeger schrieb im Beitrag #2602912: > if(!PINC&(1<<PC5)) // Abfrage PortC PC5 LED 5 Grün Operatoren Reihung! Das hier wird als ( !PINC ) & ( 1 << PC5 ) gewertet. Das ist aber nicht das was du willst. Du willst nicht, dass der Inhalt vom Pin Register logisch
-
Thread
Pins am Port in einem Durchgang modifizieren
Wenn du den Wert des Ports nur /setzen/ willst, was spricht gegen: [c] set_portc(uint8_t data) { PORTC = (data & 0x0F) << 1; } [/c] ? Das Ausgangsregister zum Eingangspin wird auf 0 gesetzt, die unbenutzten Pins ebenfalls.
Max K. schrieb: > [c]PORTC |= 0b00011110 & ~(1<<PORTC);[/c] Dir ist klar, daß es 0bXXXXXX in der C-Syntax nicht gibt? Servus Michael
-
Thread
#define aber wie?
Besonderheit? Dann zu der define-Zeile: Habe ich das so richtig verstanden? (volatile struct bits*)&PORTC --> Cast der Adresse von PORTC in einen Pointer vom Typ [volatile struct bits]. ((*(volatile struct bits*)&PORTC).b0) ^ | Dieser Stern ist dann der Inhaltsoperator -Richtig? Bitte um
> Dann zu der define-Zeile: > Habe ich das so richtig verstanden? > > (volatile struct bits*)&PORTC --> Cast der Adresse von PORTC in einen > Pointer vom Typ [volatile struct bits]. So in etwa. volatile verbietet dem Compiler hier wieder einige Optimierungsmöglichkeiten, so dass er diesen Befehl
-
Thread
1 Sekunde mit Timer1 ATmega32 (Bascom) Hilfe beim berechnen
$crystal = 14745600 $baud = 9600 Baud 9600 Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.4 , Db6 = Portc.5 , Db7 = Portc.6 , E = Portc.2 , Rs = Portc.0 Config Timer1 = Timer , Prescale = 256 Enable Timer1 On Timer1 Timer1_isr Timer1 = 51135 Dim A As Integer Do
-
Thread
CAN-Bus mit BASCOM
vermutlich üner Config PORTC = input bzw config PORTC = output (oder Config PORTC = puput...) Zu Bascom git es ein ca. 700 Seiten langes Handbuch/Befehlsreferent (~32MB pdf). Da lohnt es sich, einen Blick reinzuwerfen. IMHO
In dem Du den Portc von Ausgang auf Eingang schaltest. Z.B. mit dem Befehl Config Portc = Input. Oder DDRC = 0.
-
Thread
compilerfehler: multiple definition of `fuerporta'
void multiplexSetColumns1(void) { PORTC = (muster1>>1); fuerporta = muster1 & ~0b111111110; fuerporta = (fuerporta<<multiplexLastColumn); PORTA = (fuerporta | PORTA); } // 5V Spannungen auf Säulen legen (Anodenpins bei LEDs) void multiplexSetColumns2(void) { PORTC = (muster2>>1); fuerporta = muster2 & ~0b111111110; fuerporta = (fuerporta<<multiplexLastColumn); PORTA = (fuerporta | PORTA); } void multiplexSetLevel(int freischaltung, int level) {
-
Thread
Umstieg Atmega32 auf Atmega324P
// BEFEHLE void setCommand( uint8_t data ){ _delay_ms(10); DDRC = 0xff; // ausgang PORTC = data; RW_0; CO_0; E_1; _delay_us(50); E_0; } // DATEN void lcd_putc( uint8_t data ){ _delay_ms(10); DDRC = 0xff; // ausgang PORTC = data; RW_0; CO_1;
addr = 0x80; if (y==1) addr = 0x90+x; else if (y>1) addr = 0xA0+x; _delay_ms(10); PORTC = addr; RW_0; CO_0; E_1; _delay_us(50); E_0; } void lcd_clear(void) { setCommand(0x01); } void lcd_puts(const char *s) { while (*s) { lcd_putc(*s); s++;
-
Thread
Suche hilfe für einen blutigen Anfänger
ldi r16, 0b00000011 ; Init vom LCD (Siehe Datenblatt) out PORTC, r16 ; PORTC Setzen rcall lcd_enable ; LCD Enable rcall delay5ms ; Pause 5ms rcall lcd_enable ; LCD Enable
r17 swap r16 ; Tausche andi r16, 0b00001111 out PORTC, r16 rcall lcd_enable andi r17, 0b00001111 out PORTC, r17 rcall lcd_enable rcall delay50us cbi portd, 2 ret lcd_command
-
Thread
ATMega 168PB Interrupt Programmieren
// Turns on INT0 sei(); // turn on interrupts*/ while(1) { PORTC|=(1<<PORTC0); //PINC0 ist über ein Kabel mit dem PORTD2 verbunden _delay_ms(500); PORTC&=~(1<<PORTC0); _delay_ms(10000); } } [/c] -------------------------------------------------
-
Thread
ATMega32 ADC Problem --> PORTC immer High
erstaunliche Ergebnis: Am PIN liegen bei Betrieb 4,8V an. Genauso, wie an allen anderen Pins von PORTC. Ich habe daraufhin mein Programm überprüft, ob ich vielleicht irgendwo PortC auf High gesetzt habe, ist aber nicht so. Später habe ich in meinem Hauptprogramm in der while-Schleife DDRC auf Eingang und PORTC auf Low gesetzt. Trotzdem liegen an den PORTC Pins weiterhin 4,8V an. Dass heißt, dass mein ADC ja funktioniert, aber irrtümlicherweise immer 4,8V anliegt. Ich habe auf meiner Platine auch nach
-
Thread
Timer0 eines ATMega32 unregelmäßig
'Interner Pullup Widerstand ein Tuer Alias Pina.2 'Ausgänge Config Portc.0 = Output 'Ein Pin wird als Ausgang konfiguriert PC0 (also Pin0 von Port C) Config Portc.4 = Output 'Ein Pin wird als Ausgang konfiguriert PC4 (also Pin4 von Port C) Config Portc.1 = Output 'Ein Pin wird als Ausgang konfiguriert PC1 (also Pin1 von Port C) Pumpe Alias Portc.0 'Alias zuordnen Lampe Alias Portc.4 'Alias zuordnen Ventil Alias Portc.1 '
-
Thread
Warum diese Subtraktion
short bar = 100; PORTA = bar>>8; bar += foo; PORTB = bar>>8; bar = bar + (foo - 256); PORTC = bar>>8; [/c] PORTA -> 0x00 PORTB -> 0x01 PORTC -> 0x01 Wo kommen die Einsen her?
bar = 100; PORTA = bar&0xFF; bar += foo; PORTB = bar&0xFF; bar = bar + (foo - 256); PORTC = bar0xFF; [/c] schreibe, dann passt es PORTA -> 0x64 PORTB -> 0x63 PORTC -> 0x62
-
Thread
4 Tasten 1Led und Autorepeat
; LEDs .equ led_ddr = DDRB .equ KEY_PIN = PINC ; Tasten .equ KEY_PORT = PORTC .equ KEY_DDR = DDRC dann geht es nicht mehr. Ich habe an PORTD mein LCD angeschlossen, deshalb sollen die 4 Taster an PORTC.
mehr? Die ging doch die ganze Zeit! Kann an einem Mega8 plötzlich der PortC kaputt gehen? Warum muß ich bei Schaltung xxx jetzt AVcc und alle GND anschließen, bei meiner Mega8_Schaltung ging das doch auch ohne? Beliebig fortzusetzen und einzusortieren bei: Braucht eine
-
Thread
[ATMEGA168] ISP - Fuses falsch gesetzt
DDRC = _BV (PC0); /* PC0 is digital output */ while (1) /* loop forever */ { /* set PC0 on PORTC (digital high) */ PORTC &= ~_BV(PC0); } return (0); }[/c] Dann hab ich den ATTINY CLKOUT mit dem ATMEGA XAL1 verbunden, bekam aber leider auch keine Verbindung. Ich schätze das es in
Warum tooglest du nicht den PC0 und verwendest den als Takt? PORTC ^= _BV(PC0);
-
Thread
Atmega 8L ADC Programm
ist val=ADCL; //Einspeichern der Werte val=(ADCH<<8)|val; if(val<6) { PORTC=0; } return 1; }
0b1111111; ist tödlich! Warum schaltest Du die Analog-Eingänge als /Ausgang/ und dann auch noch mit > PORTC=0b1111111; alle auf High?
-
Thread
AVR XPlained 328PB Freigabe/Nutzung von PCINT 21
16000000 #include <avr/interrupt.h> #include <avr/io.h> #include <asf.h> ISR(PCINT21_vect){ PORTC|=1<<PORTC3; } int main (void) { DDRD|=1<<PORTD5; PCICR|=1<<PCIE2; PCMSK2|=1<<PCINT21; sei(); while(1){} } Leider kommt hier immer eine Fehlermeldung bezüglich
#define F_CPU 16000000 #include <avr/interrupt.h> #include <avr/io.h> ISR(PCINT2_vect){ PORTC|=1<<PORTC3; } int main (void) { PORTD|=PORTD5; DDRC|=1<<PORTC3; PCICR|=1<<PCIE2; PCMSK2|=1<<PCINT21; sei(); while(1){} } [/c]
-
Thread
7-Segmentanzeige Multiplexer Schaltung ok?
einfacher zu realisieren) nächste Stelle bestimmen neues Muster für die nächste Stelle an PORTC ausgeben diese Stelle über PORTA aktivieren [/code] dann hast du automatisch einen kleinen Zeitraum in dem nichts leuchtet und das reicht dann auch schon. Das das ganze über Timer und
die einzelnen Ziffern // digits enhält die Ziffern (1-5) der angezeigten Zahl PORTC |= (1<<(z+2)); // Ziffer einschalten z++; if (z>4) z=0; }[/c]
-
Thread
mega8 Port "C" tot
Vielleicht ist die Adresse des Daten-Richtungsregisters (0x14 )falsch eingegeben ? Außerdem bekommt portc sein VCC über den Anschluss AVCC, soweit ich weiß. Ist also auch an AVCC Spannung angelegt ?
ist die Adresse des Daten-Richtungsregisters (0x14 )falsch > eingegeben ? > > Außerdem bekommt portc sein VCC über den Anschluss AVCC, soweit ich > weiß. > Ist also auch an AVCC Spannung angelegt ? Also spannung am AVCC ist vorhanden, was du mit DDR meinst verstehe ich nicht ganz DDRC=0x7F
-
Thread
LCD-Initialisierung
} } } void lcd_send_nibble( byte n ) { outp(n<<4, PORTC); sbi(PORTC, 2); //Enable = 1 nop(); cbi(PORTC, 2); //Enable =0 } void lcd_send_byte( byte address, byte n ) { if(address) sbi(PORTC,0)
) { lcd_send_byte(1, data); } void wait_busy() { register byte data; cbi(PORTC,0); //RS = 0 sbi(PORTC, 1); // RW = 1 // sbi(PORTC, 2); //E = 1 (HIGH) outp(0x0f, DDRC); //BIT 7-4 als Input do { sbi(PORTC, 2); //Enable = 1 nop();
-
Thread
Hat schonmal einer ein Opel TID ->erfolgreich<-angesteuert ?
&= ~(1<<_MRQ ); } void MRQ_low(void) { PORTB |= (1<<_MRQ); } void SCL_high(void){ PORTC &= ~(1<<_SCL); } void SCL_low(void) { PORTC |= (1<<_SCL); } void SDA_high(void) { PORTC &= ~(1<<_SDA); } void SDA_low(void) { PORTC |= (1<<_SDA); } uint8_t get_MRQ(void
-
Thread
Software PWM
nicht wirklich. Lass mich raten: Der Pin ist dauerhaft an? Der Fehler liegt wohl hier: [c] PORTC |= (0 << 0);[/c] Damit schaltest du den Pin nicht ab, sondern machst garnichts. So sollte es besser gehen: [c] PORTC &=~(1 << 0);[/c]
Ist das besonders > performant? ;-) Es macht den Code leichter lesbar. Wenn man einmal [c]PORTC &=~0;[/c] das nächste mal [c]PORTC &=~(1 << 1);[/c] oder dann auch mal noch [c]PORTC &=~_BV(2);[/c] oder gar [c]cbi(PORTC,3);[/c] schreibt, dann trägt das nicht wirklich zum leichten Verständnis
-
Thread
Unregelmäßiges Rechtecksignal Timer1
Martin schrieb im Beitrag #2308051: > if ((PORTC & (1 << PC1)) == 0) > PORTC |= (1 << PC1); > else > PORTC &= ~(1 << PC1); Mach' das mal so: PORTC ^= (1 << PC1); oder so: PINC |= (1 << PC1); mfg.
Irgendwelche Ideen, weshalb das nicht richtig funktioniert? Wackelst du ausserhalb der ISR an anderen PORTC Pins? Ohne Compiler Optimierung kann das zu solchen Effekten führen. Wenn der deine PORTC |= (1 << PC1); PORTC &= ~(1 << PC1); nicht zu sbi und cbi macht.
-
Thread
ADC Problem beim Atmega32
Messwerte } wert = voltage/6; if ((78<wert)&&(wert<=94)) PORTC = 0b11101111; //Taster 1 - LED5 else if ((60<wert)&&(wert<=77)) PORTC = 0b11110111; //Taster 2 - LED4 else if ((44<wert)&&(wert<=59)) PORTC = 0b11111011; //Taster 3 - LED3 else if ((26<wert)&&(wert<=43)) PORTC = 0b11111101; //Taster 4 - LED2 else if ((10<wert)&&(wert<=25)) PORTC = 0b11111110; //Taster 5 - LED1 else PORTC = 0b11111111; //LEDs AUS } return 0; } [/code] Bitte
-
Thread
Probleme mit Timer bei Phasenanschnitt
Interrupt erlauben TIMSK0 |= (1<<OCIE0A); } ISR( TIMER0_COMPA_vect ) { TCNT0 = 0; PORTC |= (1 << PC5); _delay_us(100); PORTC &= ~(1 << PC5); } [/c] Problem ist jetzt nur, das nicht erst gewartet wird, sondern der Impuls direkt am Nulldurchgang kommt (nach meinen Beobachtungen am
while(1) { } } ISR( INT0_vect ) { TCNT0 = 0; } ISR( TIMER0_COMPA_vect ) { PORTC |= (1 << PC5); _delay_us(100); PORTC &= ~(1 << PC5); } [/c] Soweit ich alles richtig verstanden habe, sollte das Programm ja nun so aussehen. Ich habe Prescaler auf 256 geändert. So müsste
-
Thread
LCD-Ansteuerung
DDRC=0XFF; DDRA=0XFF; DDRB=0XFF; init(); PORTA |= (1<<PA0); PORTC='T'; enable(); PORTC='E'; enable(); PORTC='S'; enable(); PORTC='T'; enable(); while(1) { } } void init(void){ PORTA &= ~(1<<PA0); PORTA &= ~(1<<PA1); PORTC=0x3C; enable(); PORTC=0x3C; enable(); PORTC=0x3C; enable(); PORTC=0xF; enable(); PORTC=0x03; enable(); PORTC=0x01; enable(); }
-
Thread
Programmierungsproblem - 5x5x5 Led Cube Mit Atmega 32
/PORTC #define led11 0b00000100 //PORTB #define led12 0b10000000 //PORTB #define led13 0b00001000 //PORTA #define led14 0b01000000 //PORTC #define led15 0b00000010 //PORTC #define led16 0b00001000 /
/PORTC #define led11 0b00000100 //PORTB #define led12 0b10000000 //PORTB #define led13 0b00001000 //PORTA #define led14 0b01000000 //PORTC #define led15 0b00000010 //PORTC #define led16 0b00001000 /
-
Thread
Programm mit einem Taster steuern
leuchtdingen(bool anforderung); Taster taster(tasterPin,enprellzeit,true); void setup() { PORTC &= ~maske; // led aus DDRC |= maske; // Output pinMode(LED_BUILTIN,OUTPUT); taster.init(); } void loop() { leuchtdingen(taster()); } void leuchtdingen(bool anforderung)
static SimpleTimer timer; static byte index = 0; if(!anforderung) { index = 0; PORTC &= ~maske; timer.stop(); return; } if(timer(zeit)) { PORTC = (PORTC & ~maske) | muster[index]; digitalWrite(LED_BUILTIN,!digitalRead(LED_BUILTIN)); timer.start
-
Thread
AVR- Taster an PortPin anschließen
Start DDRD &= ~(1<<PD3); //Int1 DDRC &= ~(1<<PC4); //Ende // Pull-up resistor PORTC |= _BV(PC3); PORTC |= _BV(PC2); PORTD |= (1<<PD1); // Enable pull-up resistor PORTD |= (1<<PD2); // Enable pull-up resistor PORTC |= (1<<PC4); // Enable pull-up resistor
Hallo, Diese IF-Abfrage [c](PINC & (1 << PC4))[/c] ist fast immer Wahr, da der Pullup von Portc.4 eingeschaltet wurde.
-
Thread
Pin für USB DFU BootLoader ATxmega128A1U
PORTE_IN # define ISP_PORT_PIN 5 #elif (XMEGA_A4U || XMEGA_C4) # define ISP_PORT_DIR PORTC_DIR # define ISP_PORT_PINCTRL PORTC_PIN3CTRL # define ISP_PORT_IN PORTC_IN # define ISP_PORT_PIN 3 #elif XMEGA_B # define ISP_PORT_DIR PORTC_DIR # define ISP_PORT_PINCTRL PORTC_PIN6CTRL # define ISP_PORT_IN PORTC_IN # define ISP_PORT_PIN 6 #else # error Unknow AVR Xmega part #endif [/c] MfG Stephan
-
Thread
Wie Drehgeber entprellen?
einen Drehgeber (siehe Bild) an einen ATXmega16A4 angeschlossen. [c] unsigned char n=0; ISR(PORTC_INT0_vect) { if(PORTC_IN & (1<<PIN1)) n++; else n--; Show_turnwheel(n); } int main (void) { Set_osc_32(); PORTA_DIRSET = 0xFF; PORTB_DIRSET = 0x0F; PORTC.DIRCLR = (1<<PIN0)|(1<<PIN1)|(1<<PIN3); // PC0, PC1, PC3 sind Input PORTC.INT0MASK = (1<<PIN0); // PC0 löst den Interrupt aus PORTC.INTCTRL = PORT_INT0LVL_LO_gc; PORTC.PIN0CTRL = PORT_ISC_FALLING_gc; PMIC.CTRL |= PMIC_LOLVLEN_bm; // Enable low interrupt level
-
Thread
Anfänger Interrupt Frage
PORTC |= (1<<1); PORTC &=~(1<<3); PORTC |= (1<<5); PORTC &=~(1<<7); _delay_ms(x); PORTC &=~(1<<1); PORTC |= (1<<3); PORTC |= (1<<5); PORTC &=~(1<<7); _delay_ms(x); PORTC &=~(1<<1); PORTC |= (1<<3); PORTC &=~(1<<5); PORTC |= (1<<7); _delay_ms(x); } } Vielen Dank schonmal! Schöne Grüße
-
Thread
MCP2515 Interrupt beim Empfang löschen
.7 = Output Config Portb.0 = Output Config Portb.1 = Output Config Portb.2 = Output Config Portc.0 = Output Config Portc.1 = Output Config Portc.2 = Output Config Portc.3 = Output Config Portc.4 = Output Config Portc.5 = Output Config Spi = Hard , Data Order = Msb , Master = Yes
.7 = Output Config Portb.0 = Output Config Portb.1 = Output Config Portb.2 = Output Config Portc.0 = Output Config Portc.1 = Output Config Portc.2 = Output Config Portc.3 = Output Config Portc.4 = Output Config Portc.5 = Output Config Spi = Hard , Data Order = Msb , Master = Yes
-
Thread
Atmega16 EA DIP204-6 4-line
ich verwende ATmega 8 und PORTC aber es funktioniert nicht. Ich habe dein Code verwendet und PORTC umgesetzt und es macht nix, nur die beleuchtung funktioniert. Kann ich dein Code mit dem Atmega8 verwendet? Was muss ich sonst ändern damit ich PORTC verwenden kann? Vielleicht liegt das Problem in der Schaltung. Wo kann ich eine richtige Schaltung finden? Bitte, Hilfe!!. Ich muss meine Bachelor Arbeit abgeben und läuft nicht :-(
-
Thread
PWM mit ATMEGA8
: halte F10 und halte es gedrückt, und dann beobachte mal was OCR2 macht. Das was du da mit dem PortC aufführst ist ziemlicher Unsinn. Aber eins nach dem anderen.
> Wieso ist das mit PORTC unsinn? Weil ich Tomaten auf den Augen habe :-) Ich hab nicht mitgekriegt, dass deine Taster low aktiv sind
-
Thread
lc7985 intialisieren
$regfile = "m32def.dat" 'ATmega8 Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.0 , Db7 = Portc.1 , E = Portd.4 , Rs = Portd.5 Config Lcd = 24 * 2 Config Lcdbus = 4 Do Cls Loop Ist ein Atmega32 und die Verkabelung stimmt 100%tig
Oweh, beim dem Durcheinander von Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.0 , Db7 = Portc.1 würde es mir schwerfallen, die richtigen Init-Kommandos abzusenden. Kannst du das nicht "begradigen", z.B. DB7 an PortC-3 DB6 an PortC-2
-
Thread
MAX7300
rcall send1 sbrs data, 0 rcall send0 rcall ackn ret send1: sbi PORTC, 1 rcall wait sbi PORTC, 0 rcall wait cbi PORTC, 0 rcall wait cbi PORTC, 1 ret send0: rcall wait sbi PORTC, 0 rcall wait cbi PORTC, 0 rcall wait ret ackn: rcall wait sbi PORTC, 1 cbi DDRC, 1 sbi PORTC, 0 rcall wait sbis PINC, 1 ; wenn Datenbit von Empfänger gelöscht, cbi PORTC, 2 ; LED an cbi PORTC, 0 sbi
-
Thread
SPI ATMega328P Daten sende
MSTR)|(1<<SPR0); sei(); Anschließend will ich die Daten aussenden: while (1) { PORTC &=~(1<<PC1); //SS auf low SPDR = systembyte1; //Wert i schreiben while(!(SPSR &(1<<SPIF))); //Warten bis alles übertragen ist SPDR = systembyte2; //Wert i schreiben while(!(SPSR &(1<<SPIF))); //Warten bis alles übertragen ist PORTC |= (1 << PC1); //SS High _delay_ms(100); PORTC &=~(1<<PC1); //SS auf low SPDR = motorbyte1; //Wert i schreiben while(!(SPSR &(1<<SPIF))); //Warten bis alles übertragen
-
Thread
AVR - Software retten
Ddrc = &B1111_1111 'das Gleiche mit Port C (Display) Portc = &B0111_0000 'nur andere Schreibweise Ddrd = &B1100_0000 'D4+5 für LCD-LED Beleuchtung Outp. Portd = &B1111_1111
---------LCD configurieren------------------------------------------ Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , _ Db6 = Portc.6 , Db7 = Portc.7 , E = Portd.6 , Rs = Portd.7 Config Lcd = 16 * 2 Initlcd : Cls : Cursor Off '-------------------------------------------------
-
Thread
Taster - LED Beispiel
/ 7. und 8. PIN vom Port D als Ausgang DDRC &= ~(1<<0); // 1. PIN vom Port C als Eingang PORTC |= (1<<0); // internen Pull-up einschalten a = PINC & ~(1<<0); if(a != 0) // wenn Taster gedrückt { PORTD|=(1<<7); // LED8 geht an } else // wenn Taster nicht
/ 7. und 8. PIN vom Port D als Ausgang DDRC &= ~(1<<0); // 1. PIN vom Port C als Eingang PORTC |= (1<<0); // internen Pull-up einschalten a = PINC & ~(1<<0); while(1) { if(a != 0) // wenn Taster gedrückt { PORTD|=(1<<7); // LED8 geht an PORTD&=
-
Thread
ATmega2560 resests after configuring timer
include <avr/io.h> #include <util/delay.h> int main(void) { counter = 0; DDRC = 0xFF; PORTC = 0xFF; _delay_ms(500); PORTC = 0; _delay_ms(500); // initialize timer TCCR0A = (1<<WGM01); // enable CTC mode TCCR0B = (1<<CS00)|(1<<CS02); // set prescaler OCR0A =
); // enable timer interrupt sei(); while(1) ; } ISR(TIMER0_COMPA_vect) { PORTC = 0xFF; } [/c] Wenn der Code korrekt ausgeführt wird, sollte eine Diode an PortC nur einmal am Anfang blinken und danach an bleiben. In der Praxis blinkt sie aber die Ganze Zeit (aber nur wenn ich
-
Thread
Atmega162 macht nach Aus-Einschalten blödsinn
for(value_a=0;value_a!=size;value_a++) { PORTA=drehen(offset_a+value_a); PORTC=drehen(offset_b+value_b); delay_us(300); } for(value_b=0;value_b!=size;value_b++) { PORTA=drehen(offset_a+value_a); PORTC=drehen(offset_b+value_b);
for(value_a=size;value_a!=0;value_a--) { PORTA=drehen(offset_a+value_a); PORTC=drehen(offset_b+value_b); delay_us(300); } for(value_b=size;value_b!=0;value_b--) { PORTA=drehen(offset_a+value_a); PORTC=drehen(offset_b+value_b
-
Thread
PIC16F690 AN8 bis AN11 nicht nutzbar
// ANSEL = 0b11111111; ANSELH = 0b10001111; PORTA = 0; PORTB = 0; PORTC = 0; TRISC = 0b11111111; TRISB = 0b00110000; ADCON0bits.CHS0 = 0; ADCON0bits.CHS1 = 0; ADCON0bits.CHS2 = 0; ADCON0bits.CHS3
PIE1 = 0b00000000; // Disable all PERIPHERAL Interrupts } void Hardware_portc_test (void) { // // Basic Setup der HW // PORTC = 0; __delay_ms(500); PORTCbits.RC0 = 1; __delay_ms(500); PORTCbits.RC1 = 1; __delay_ms(500); PORTCbits.RC4
-
Thread
Problem mit Schieberegister und steigende Flanke
Schieberegister 74HCT165 (s.Anhang) und frage die so ab: (Das funktioniert auch) In der main: [c] 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<
else { Eingang[m] = true; } // Clock auf High PORTC |= (1<<PC4); // Clock auf Low PORTC &= ~(1<<PC4); // Clock auf High PORTC |= (1<<PC4); } [/c] Jetzt will ich mit der Funktion vom Karl-Heinz (paar Beiträge
-
Thread
Externe .c bringt nur theater
hc_sr04_init(); timer1_motorpwm_init(); sei(); while (1) { SERVO_MITTE; PORTC = (0<<MOTORB_2) | (0<<MOTORA_2) | (1<<MOTORB_EN) | (1<<MOTORA_EN); abstand = HC_SR_04(); if (abstand >100) { MOTOR_PWM(50,50); } else if (abstand > 40 && abstand <=
links = HC_SR_04(); SERVO_RECHTS; _delay_ms(250); rechts = HC_SR_04(); PORTC = (1<<MOTORB_2) | (1<<MOTORA_2) | (1<<MOTORB_EN) | (1<<MOTORA_EN); MOTOR_PWM(10,10); _delay_ms(1000); PORTC = (0<<MOTORB_2) | (0<<MOTORA_2) | (1<<MOTORB_EN) | (1<<MOTORA_EN);
-
Thread
Adresse eines PORTs
bin Anfänger und arbeite mit dem Mikrocontroller AT90CAN128. ich beschäftige ich miche im IO vom PORTC. ich will die Addresse von PORTC und DDRC auslesen. ich habe so geschrieben. printf("DDRC=%x PORTC=%x",&DDRC,&PORTC); ich bekomme: DDRC=27 und PORTC=28 Aber ich iocanxxx.h habe diese
bin Anfänger und arbeite mit dem Mikrocontroller AT90CAN128. > ich beschäftige ich miche im IO vom PORTC. > > ich will die Addresse von PORTC und DDRC auslesen. > ich habe so geschrieben. > > printf("DDRC=%x PORTC=%x",&DDRC,&PORTC); > ich bekomme: DDRC=27 und PORTC=28 > > > Aber ich iocanxxx.h
-
Thread
GLCD Routinen ( KS0108, HD61202 )
auch gleich schreiben: [code]#define CD PA7 // Data/Control (RS) PinNumber[/code] PORTC wird für die Datenbits genutzt. Gruß - Markus
> #define LCD_DATA_PORT PORTC // Data Output Register >Sind das alle Einstellungen die ich ändern muss oder muss ich wo anders >noch was ändern ? Schalte die JTAG Fuse aus.