Port pin is > V IH // 0 = Port pin is < V IL CLRF PORTA CLRF PORTB CLRF PORTC CLRF PORTD CLRF PORTE ; ANSEL ANALOG SELECT REGISTER // 1 = Analog input. Pin is assigned as analog input (1) . Digital input buffer disabled. // 0 = Digital I/O. Pin is assigned
<= 1; c++; if (spalte==32) { spalte=1; c = 0; } //Ausgabe der neuen Spalte PORTA |= matrix[c]>>8; PORTC |= matrix[c]; PORTB = ~spalte; // neue Spalte ein, low active //Debug LED PORTA ^= (1<<PA7); // slowy für eine "angenehme" Geschwindigkeit slowly++; if (slowly == 1500) { slowly = 0; flag_slow = 1;
sei(); } ISR(TIMER1_COMPA_vect) { //Multiplexen der Transistoren PORTA &= ~0xFF; PORTC &= ~0xFF; var=var*2; if (var==32) { var=1; } PORTB = ~var; c++; if (c == 5) { c = 0; } //slowy für eine "angenehme" Geschwindigkeit slowy++; if (slowy == 1500)
xu3; matrix2d[3][1]=xu4; matrix2d[4][1]=xu5; //Ausgabe des Arrays PORTA |= matrix2d[c][0]; PORTC |= matrix2d[c][1]; //Debug LED PORTA ^= (1<<PA7); } [/c]
der Transistoren for (int i=0; i<5; i++) { PORTB |= ~0xFF; //Debug LED PORTC |= (1<<PC7); } }; [/c] Ich vermute, dass ich den Timer wahrscheinlich nicht richtig verwende, jedoch entzieht es sich meiner Kenntniss, wie ich mein Problem lösen kann. Vielen Dank schonmal
im Beitrag #6867364: > //Debug LED > PORTA |= (1<<PA7); Ich glaub das sollte bei dir auch PORTC heißen und nicht A.
port TRISBbits.TRISB0 = 1; // set PORTB0 as input port Brake signal TRISCbits.TRISC6 = 0; // set PORTC6 as output port Light_ON TRISCbits.TRISC5 = 0; // set PORTC5 as output port Brake_ON TRISCbits.TRISC4 = 0; // set PORTC4 as output port LCD_ON TRISBbits.TRISB3 = 0; // set PORTB3 as output port LED TRISCbits.TRISC2 = 0; // set PORTC2 as output port PWM TRISAbits.TRISA0 = 1; // set PORTA0 as input port Throttle TRISAbits.TRISA1 = 1; // set PORTA2 as input port DR TRISAbits.TRISA2 = 1; // set PORTA2 as input port Current TRISAbits.TRISA5
angeschlossen. Nach Definition von stack und den Ports lautet der Anfang meines Programms: sbi PORTC,4 ldi status,0 ;ist als r20 definiert sbi PORTC,1 nn: RJMP nn .... Im debug Mode läuft das Programm bis zum loop nn. Auf dem Chip leuchtet zwar die LED 4 auf, das Programm kommt
zu LED 1. Wenn du die Zeile "ldi status,0" auskommentierst, geht es dann? Wenn du die Zeilen "PORTC,4" und "PORTC,1" vertauschst, verscheibt sich dann der Fehler auf die andere LED oder ist es wieder LED 1 die dunkel bleibt? Nächstes mal bitte den ganzen Quelltext und den Schaltplan zeigen.
Atmega64A acht Schalter (PORTA) ausliest, nachdem der PD3 gelöst worden ist und dann auf den Ausgängen (PORTC) die Outputs nacheinander kurz einschaltet, welche im Eingang aktiviert sind. Gar nicht so das Problem dachte ich. In der main Schleife funktioniert alles. Dann habe ich versucht den Code ein wenig
mikrocontrollerspezifische Konfiguration befindet sich schließlich in rfm70_config_xmega.h und spi_config_xmega_portc.h : Erst an dieser Stelle sind die Header und eingebunden, wodurch der Code abhängig vom Mikrocontroller wird. Der Umfang ist allerdings auf das absolut Nötigste beschränkt: Es werden die I/O-Register
rfm70.h | rfm70_config_xmega.h tools | bit_macros.h | mcu.h | mcu_config_xmega.h | spi_config_xmega_portc.h | uart.c | uart.h | uart_config_xmega.h ProjectA main.c ProjectB main.c ProjectC main.c Der Großteil des Codes liegt in den Ordnern Common/rfm70 und Common/tools . Er kann ohne Änderungen in jedes
<<ADSC); } void out (volatile uint16_t value) { PORTB ^= (1<<PB0); PORTD &= ~0xF0; PORTC &= ~0x3E; PORTD |= (uint8_t)((value >> 2) & 0xF0); PORTC |= (uint8_t)(value & 0x3E); } [/c] Das ganze will jetzt aber leider nicht so wie ich will. Anscheinend geht er nicht ins ISR
EIN } if ((stelle==2) && (ziffern[2]==0)) // führende Stelle ist Null { segmente = ~s7_table[16]; } PORTC = 0xFF; // common Anode: alles AUS PORTD = segmente; // Segmente für nächste Stelle laden PORTC = ~(1<<stelle); // aktuelle Stelle aktivieren, invertiert wg. Common Anode, Spalte über PNP (0 -> EIN
DDRD |= 0xFF; Also willst Du 14bit ausgeben? Dann musst Du für die oberen 6bit schieben PORTC |= (value>>8);
voll Overplay. Lösung 2: Bit-Shifting, da bräuchtest du je LED eine Zuweisung: Bsp mit 4 LED an PORTC:[x--x-xx-] (x = Ausgang) [c] PORTC |= (value & 1) << 1; PORTC |= (value & 2) << 2; PORTC |= (value & 4) << 4; PORTC |= (value & 8) << 7; [/c] Lösung 3: (da habe ich aber noch keine zufriedenstellende
of TP1, TP2 and TP3! * - Don't share this port with POWER_CTRL or TEST_BUTTON! */ #define ADC_PORT PORTC /* port data register */ #define ADC_DDR DDRC /* port data direction register */ #define ADC_PIN PINC /* port input pins register */ #define TP1 PC0 /* test pin / probe #1 */ #define TP2 PC1 /* test
5 Volt kann, d.h. MOSFET und blauen (und einige grünen) LEDs ohne zusätzlichen IC. Und noch mehr: PORTC kann andere Spannung haben. Z.B. alles von 3 Volt (SD-Card, FRAM usw.), aber MAX7219 (unter 4 Volt will nicht arbeiten) mit 5 Volt über PORTC. Oder umgekehrt, alles von 5 Volt (oder gar von 2 Volt! Oder unmittelbar von Li-OH) und FRAM mit SD-Card über PORTC. Dabei bleibt das alles bei AVR-Kern, man muß nicht umlernen, nur HW-Adressen ändern. Man kann sogar Assembler benutzen! Und Bonus: kostet nur 1/3 von ATMega1284 (auch 16k SRAM). Einziges, was
out sph,r17 ser r16 out ddrc,r16 ;Ausgänge für LED loop: rcall in_touch out portc,r16 ;Das Hauptprogramm hat auch was zu tun ... clr r16 delay2: dec r16 brne delay2 rjmp loop in_touch: clr r16 out ddrd,r16 ;Ausgänge loslassen ser r16 cli
PWM_PORTB PORTB // Port für PWM #define PWM_DDRB DDRB // Datenrichtungsregister für PWM #define PWM_PORTC PORTC // Port für PWM #define PWM_DDRC DDRC // Datenrichtungsregister für PWM #define PWM_PORTE PORTE // Port für PWM #define PWM_DDRE DDRE // Datenrichtungsregister für PWM
DDRC = B00000000; // Analog 0-7 as input Nun kann man durch ein weiteres Set auf das Register PORTC= B11111111; Die Pull-Up Widerstände intern hinzuschalten ist das korrekt ? So das ich die ANL Eingänge auf GND ziehen kann, und sich so auch der Port-Bitzusatnd erfolgreich verändert. Oder
ein Board mit einem ATMega128A. Der ATMega erzeugt 32 PWM Kanäle. Der komplette PortA, PortB, PortC und PortE laufen als PWM. Ich habe dazu den Software PWM Code hier aus dem AVR-GCC Tutorial von 8 auf 32 CH geändert. Dieser läuft mit Timer1. Nachdem alle 32 PWMs funktionierten habe ich
E pulse width } //============================================================================ // PORTC0_LCD_CS1 and PORTD6_LCD_CS2 must be set to select the desired // controller //---------------------------------------------------------------------------- void write_lcd_data(unsigned char data) {