-
Thread
Problem mit PWM für Buck-Converter
<< PD0) | (1 << PD1); // PD0 and PD1 as outputs DDRC = 0xFF; // whole PORTC as output DDRB = 0xFF; // whole PORTB as output bg_off(); tg_off(); init_timer(); sei(); // enable interrupts globally while(1)
-
Thread
A t m e g a 88 wird nicht mehr erkannt
ldi r17, 0x00 ende: out PORTC, r16 out PORTC, r17 rjmp ende [/asm]
die 8 MHz nicht, nötig wäre ein Quarz über 10 MHz. Alternativ könnte man den ATmega8 mit out PORTC, r16 out PORTC, r17 vollpacken plus Rücksprung vom Ende an den Anfang und mehrmals versuchen, die L-fuse des 88 umzustellen. Wobei allerdings dieses > Auf dem Atmega88 ist ja auch noch ein
-
Thread
Byte aus Einzelbits zusammenstellen / wie debuggen? (PIC18 und XC8)
kannst du nicht gleich [c] char busStatus = PORTC; [/c] schreiben?
Das wäre natürlich am schönsten, aber leider sind die Einzelbits auf PortA und PortC verteilt.
-
Thread
SPI MCP23S09
BANKSEL SSPSTAT movlw B'11000000' movwf SSPSTAT Programm ; bcf PORTC,2 BANKSEL PIE1 bsf PIE1,SSPIE BANKSEL PORTA bcf PORTA,0 BANKSEL SSPBUF movlw B'00101000' movwf SSPBUF movlw SSPBUF movwf
-
Thread
Interrupts mega168
} } int main(void) { DDRD = 0b11111111; PORTD = 0b00000000; DDRC = 0b11000000; PORTC = 0b00111111; PCICR = 0b00000010; //PCMSK1 freischalten PCMSK1 = 0b00000010; //PCINT9 (PC1-PIN) an Taster EICRA = 0b00001100; //Steigende Taktflankenerkennung sei(); while
-
Thread
Frage zur Bitmanipulation
struct bits *)&(p)) #define BPORTA BITS(PORTA) #define BPORTB BITS(PORTB) #define BPORTC BITS(PORTC) #define BPORTD BITS(PORTD) #define BPINA BITS(PINA) #define BPINB BITS(PINB) #define BPINC BITS(PINC) #define BPIND BITS(PIND) int main(void) { BPORTD.b4 = 1; if(BPINC.b6) BPORTD.b1
bits *)&(p)) > > #define BPORTA BITS(PORTA) > #define BPORTB BITS(PORTB) > #define BPORTC BITS(PORTC) > #define BPORTD BITS(PORTD) > > #define BPINA BITS(PINA) > #define BPINB BITS(PINB) > #define BPINC BITS(PINC) > #define BPIND BITS(PIND) > > int main(void) { > BPORTD.b4 = 1; > if
-
Thread
Avr zieht pin nicht auf masse
Hallo, [c] DDRC = 0xff; PORTC = 0x00; while(1) ; [/c] Dieser Code sollte bei meinem Atmega644p pins PC1 PC2 PC3 auf Masse ziehen. Allerdings wird nur PC1 auf Masse gezogen. Bei den anderen beiden Messe ich 5V gegen Masse.
-
Thread
Problem Mit LCD display
das was es soll. es Steht auf dem Dosplay `bddf anstat Hallo. Pinbelegung ist folgende: RS PORTC2 EN PORTC3 DB4 PORTC4 DB5 PORTC5 DB6 PORTC6 DB7 PORTC7 Danke für eure Hilfe
-
Thread
Frage zu Afängerfehler
/ LED ;setzen, also Ausgang DDRC &=~(1<<PC5); // Taster (low-activ); nicht setzen, also Eingang PORTC |=(1<<PC5); // Pull Up Widerstand // (nicht noetig wenn hardwaremaessig realisiert !) int Tastendruckzaehler=0; // 1=Ledblinken() , 2=LED ein, 3=LED aus while(1) //Endlosschleife des Hauptprogrammes
-
Thread
Pixy Pet - Probleme SPI
return SPDR; } uint8_t SensorArray() { [...] } void PullupSet() { PORTB = (1<<PINB7); PORTC = (1<<PINC6); PORTD = (1<<PIND4); PORTF = (1<<PINF7) | (1<<PINF5) | (1<<PINF4); } int main(void) { uint16_t ObjectBlock; uint16_t Checksum; uint16_t signatureNr; uint16_t xposition
-
Thread
Schiberegister 74HC595 wird sehr heiß
waren es 16bit Latches und keine "billigen" 595er, spielt ja aber keine Rolle. Da ist dann PortB und PortC mit einmal Schrott (2x16bit). Das auf so einer teueren Meilhaus Messkarte. Da kommt Freude auf. Das am Vormittag. Nicht einaml Digikey hatte die 16bit Latches am Lager... Wenn Du aber alle Spannungen
-
Thread
ATMEGA164 Ports gesetzt
habe einen ATMGA164PA und das Problem das Ports gesetzt sind die ich nicht ansteuere. Ich nutze den PORTC. In meinem Programm habe ich folgendes : DDRC=0xff; PORTC=0b00000001; Jetzt hätte ich erwartet das mein PORT C nur am PIN 22 (PC0) eine 5V Spannung ausgibt. Wenn ich mit dem Messgerät
-
Thread
xmega Ports schalten
kann man sich den Clock auf einen Pin ausgeben lassen (in diesem Fall Port C, Bit 7): [c] PORTC_DIRSET = 0x80; /* SysClock on bit 7 */ PORTCFG_CLKEVOUT = PORTCFG_CLKOUT_PC7_gc; [/c]
-
Thread
PWM Tonhöhe und Lautstärke
binary_foo_bin_end - _binary_foo_bin_start; DDRC=0xFF; for (i=0; i<size; i++) { PORTC = pgm_read_byte(&_binary_foo_bin_start[i]); } } [/c] Man muss nur noch das Objektfile dem Linker mitteilen, das geht in den Projektoptionen unter AVR Studio 4.18 so. Project -> Configuration
foo.bin" }; int main () { for (size_t i = 0; i < sizeof (foo_bin); ++i) { PORTC = foo_bin[i]; } }[/c] Praktischerweise kann man auch andere Sachen mit ins Array packen, zum Beispiel eine abschließende \0 um einen C-String zu bekommen: [c]static const __flash char foo_c
-
Thread
Problem mit CNY70 und Motorregelung
für die Motoren if ((PINB & 1<<PINB4) && (PINB & 1<<PINB3)) // PB3 oder PB4 High { PORTC &= ~( (1<<PC0) | (1<<PC2) ); // Ausgang auf Low gesetzt PORTC |= (1<<PC1) | (1<<PC3); // Ausgang auf High gesetzt } else // PB3 oder PB4 Low { PORTC &= ~( (1<<PC0) | (1<<PC2) ); // Ausgang auf Low gesetzt PORTC &= ~( (1<<PC1) | (1<<PC3) ); // Ausgang auf Low gesetzt } // Kanal 0, Motor Regelung links adcval = ADC_Read(1); { if((adcval >=0) && (adcval <=102)) {
-
Thread
2 Atmega8 über I²C / TWI verbinden
main (void) { DDRB = 0b00000001; //PB0 = Ausgang PORTB = 0b00000000; // LED aus ! PORTC = 0b00110000; // Pull-Up für TWI an PORTC4 und 5 //TWI als Slave mit Adresse slaveadr starten while(1) { init_twi_slave(SLAVE_ADRESSE); //i2cdatamit Werten füllen
Eingänge PORTB = 0b00000001; //Pull-Up an PINB.1 für Taster setzen DDRC = 0b11111111; PORTC = 0b00110000; // Pull-Up von SDA und SCL am MAster i2c_init(); // init I2C interface while (1) { if (bit_is_clear (PINB, 0)) // wenn Taster 1 gedrückt wird {
-
Thread
PWM unterbrechen
a =1023; int d_time = 200; // delay time DDRC &= ~(1<<PC1); //TASTER Pullup PORTC |= (1<<PC1); uint8_t next = 1; while(1) { if(next == 1){ _delay_ms(d_time); PORTC &= ~(1<<PINC3); PORTC &= ~(1<<PINC5); DDRB |= (1<<PINB1);
if(bit_is_set(PINC,PINC1)){ PORTC |= (1<<PINC5); } else{ PORTC &= ~(1<<PINC5); next = 1; } } } }
-
Thread
Displayplatine Problem mit SPI DOGL128-6
PORT_LED ^= (1 << PIN_LED3); // LED3 umschalten // TASTER Pins #define PORT_TASTER PORTC #define DDR_TASTER DDRC #define PIN_TASTER_EINGANG PINC #define PIN_TASTER1 7 // PC7 #define PIN_TASTER2 6 // PC6 #define PIN_TASTER3 5 // PC5 #define PIN_TASTER4
-
Thread
Seriell Daten Empfangen
Line); if (get == 1){ //+++++++++++++++++LED TEST+++++++++++++++++// PORTC |= (1<<PC0); // Ausgang auf 1 _delay_ms(500); PORTC |= (1<<PC1); _delay_ms(500); PORTC |= (1<<PC2); _delay_ms(500); PORTC &= ~(1<<PC0); // Ausgang auf 0 _delay_ms(500); PORTC &= ~(1<<PC1); _delay_ms(500); PORTC &= ~(1<<PC2); _delay_ms(500); //+++++++++++++++++LED TEST+++++++++++++++++// } } { } }
-
Thread
ATMega32M1 UART
DATA_INT_RX; } int main(void) { unsigned char DATA = 0x55; DDRC |= (1<<PC7); PORTC |= (1<<PC7); UART_Init(); sei(); uart_transmit('T'); uart_transmit('E'); uart_transmit('S'); uart_transmit('T'); while(1) { DATA = uart_receive();
-
Thread
Atmeg führt reset ohne Grund durch
gitl bei 20 Mhz //ICR1 = 50; //PWM-Frequenz 5 kHz bei 1 Mhz OCR1A = 0; // PWM auf 0 PORTC |= (1<<PORTC1); } void init_Port(void) //Initialisiert die Ports { DDRD = 0b11110000; // PD4-PD7 als Ausgang } void set_PWM (uint16_t soll, uint16_t max_wert) // Stellt den PWM ein, max_wert
-
Thread
DotMatrix 16x4 in C ansteuern
// beliebigen Postion anfangen #ifndef LCD_PORTS #define LCD_PORTS #define LCD_PORT PORTC #define LCD_DDR DDRC // 4 Bit LCD Datenbus DB4-DB7, das unterste Bit DB4 kann auf den Portbits 0..4 liegen // LCD DB4-DB7 <--> PORTC Bit PC0-PC3 #define LCD_DB PC1 // LCD Steuersignale RS und EN // LCD RS <--> PORTC Bit PC4 (RS: 0=Data, 1=Command) #define LCD_RS PC6 // LCD EN <--> PORTC Bit PC5 (EN: 1-Impuls für Daten) #define LCD_EN PC5 #endif // LCD_PORTS /////////////
-
Thread
case-Anweisung
funktionierende Anweisung [c] void light(int x) { switch (x){ case 0: PORTC |= (1<<PC5); break; case 1: PORTC &= ~(1<<PC5); break; } } [/c] Die nicht funktionierende Anweisung [c] void led_rt(int x) { switch (x)
Eingänge DDRC &= ~(1<<DDC3); DDRD &= ~(1<<DDD6); //Setzen der Pull-Ups der Eingänge PORTC = (1<<PC3); PORTD = (1<<PD6); //Setzen der Ausgangszustände PORTB |= (1<<PB0) | (1<<PB1); PORTC |= (1<<PC5); } [/c]
-
Thread
ws2812b Wert zerlegen und nacheinander abfragen
ziemlich umständliche Art und Weise. Das Timing habe ich so gelöst: [c] void output_null() { PORTC |= (1<<PC0); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); PORTC &= ~(1<<PC0); asm volatile ("nop"); asm volatile
("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); PORTC &= ~(1<<PC0); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); } void output_reset() { _delay_us(50); } [/c] ist bestimmt nicht die Beste
-
Thread
Input Capture Atmega16
Auf negative Flanke umschalten setbit(IPC_ISR_flag, timer1_capt_1st_edge); togbit(PORTC, PIN0); } //===================== // capture falling edge else if( ( bit_is_set(IPC_ISR_flag, timer1_capt_1st_edge)) && (!bit_is_set(IPC_ISR_flag, ipc_messure_complete)) )
-
Thread
EEPROM lesen im Interrupt
Es ist auch egal welche. Und auch in welchem Interrupt. Ich habe immer das selbe Verhalten, dass PORTC abgenullt wird. Alle anderen PORTs bleiben unberührt.
habe ich den Pin invertiert. Es hat alles perfekt funktioniert. Wenn ich allerdings einen Pin am PORTC nehme und die EEPORM-Leseroutine benutze, dann gehts nicht. Der PORTC wird einfach überschrieben.
-
Thread
Atmega128 und UART
delay_ms(1000); TransmitUART0(0x61); } } ISR(USART0_RX_vect) { receivedByte = UDR0; PORTC ^= (1<<PC0); } [/c] Und hier die UARTMethods.h die in die main includiert wird: [c] #ifndef UARTInit #define UARTInit #define EVEN 0 #define ODD 1 #include <math.h> #include <avr/
-
Thread
LCD Dot-Matrix 122x32 - Befehle ok, aber keine Daten
OUT DDRC = 0xFF; //PORTC: OUT PORTC = 0x00; PORTD = 0x00; //Reset PORTC/D PORTC = 0b00010000; //Reset Display _delay_us(100); PORTC = 0b00000000; _delay_us(100); PORTC = 0b00010000; //Reset
PORTD = 0b10101111; En_L; PORTC = 0b00010011; //Write data to controller 1 En_H; PORTD = 0b10101011; //Data En_L; PORTC = 0b00010101; //Write data to controller 2 En_H; PORTD = 0b10101111; //Data
-
Thread
bidirectional IO pins
Mikrocontrollern ALLE Pins bidirektional sind, ... Nö. Beim ATMega103 bzw. ATMega128 im M103-Mode ist PortC nur Ausgang und PortF nur Ausgang. MfG Spess
-
Thread
Alle Eingänge in eine uint16_t variable schreiben
Hallo, wie fasse ich in AVR-GCC alle Eingänge die auf verscheiden Ports (PORTA, PORTB, PORTC) liegen in eine variable die uint16_t lang ist. Ich habe insgesamt 11 Eingänge die wegen dem Layout auf den drei Ports verteilt sind. Ich will einfach beim Programm an einem bestimmten Punkt, alle
-
Thread
Display Ansteuerung - 16 x 4 DotMatrix LCD
----- Ddrc = &B11111111 Ddrd = &B11111111 Config Lcd = 16 * 4 Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.3 , Db6 = Portc.2 , Db7 = Portc.1 , E = Portc.5 , Rs = Portc.6 Portd.7 = 1 Waitms 20 Locate 2 , 4 Lcd "Hallo" End ------------------------------------------------
.2 , Db7 = Portc.1 , E = Portc.5 , Rs = Portc.6 Portd.7 = 1 '----------------------------------------------------------------------- Waitms 50 Initlcd Cls Cursor On Blink Locate 1 , 1 Lcd "Hallo"
-
Thread
Programm bleibt stehen
Genau Masse geht dann geschaltet auf den jeweiliegen Eingang vom PORTC
) { _delay_ms(20); } } } [/c] und du drückst auf den Taster am Portpin PORTC / 0 (Verezeih wenn ich alles 3 mal nachfrage. Aber ich muss mir hier ein Bild von der Situation bei dir machen. Und bei Fehlersuche stelle ich grundsätzlich alles in Frage)
-
Thread
LCD und PS2 Tastatur an Atmega 8
$regfile = "m8adef.dat" $crystal = 16000000 Config Lcd = 40 * 2 Config Lcdpin = Pin , Db4 = Portc.5 , Db5 = Portc.4 , Db6 = Portc.3 , Db7 = Portc.2 , E = Portc.1 , Rs = Portc.0 Config Keyboard = Pind.1 , Data = Pind.0 , Keydata = Keydata Cursor On Blink Dim Text As String * 40 Dim I As Byte