-
Thread
LCD über Subroutine ansprechen ???
B00000001 'Int0 als Eingang konfiguriert - Programmiertaste Portc = &B00001111 Portd.4 = 1 'Pull-Up von Int0 an Portd.3 = 1 'Pull-Up von PD3 an Config Scl = Portc.5 'SCL-Port auf Port C.5 Config Sda = Portc.4 'SDA-Port auf Port C.4 Config Lcd = 40 * 4 'Anzeigemodus 40 x 4 Zeichen Config Lcdpin = Pin , Db4 = Portd.5 ,
-
Thread
4x20-LCD läuft nicht richtig
Dabei scheitere ich zur Zeit an der Hürde, mit if einen Intervall abzufragen: lcddata=0x54; PORTC=lcddata; if ((lcddata >= LCD_LINE1)&&(lcddata < (LCD_LINE1+LCD_ROWS)));// 0x00 ... 0x14 { *line=1; *row=(lcddata-LCD_LINE1)+1;// 0x01 PORTC=(lcddata-LCD_LINE1)+1;// 0x00 - 0x00 + 0x01
bool lcd_nextline(void) { unsigned char line = 0x00, row = 0x00; lcd_getlr(&line, &row); PORTC=line; // siehe lcd_main, erwünschter Ausgabewert: 0x01, 0x02, 0x03 // aaber: // original mit switch/case: lcd_getlr zählt 0x01, 0x02, 0x00 // meine eigene, mit if: lcd_getlr zählt 0x01
-
Thread
RS232 unter C auf Atmega8 konfiguriren
PortB alle Bits ON"); uartPutString("\n pb = PortB alle Bits OFF"); uartPutString("\n PC = PortC alle Bits ON"); uartPutString("\n pc = PortC alle Bits OFF"); uartPutString("\n PD = PortD alle Bits ON"); uartPutString("\n Bx = PortB Bit X ON (X = 0..5)"); uartPutString("\n bx = PortB Bit X OFF (X = 0..5)"); uartPutString("\n Cx = PortC Bit X ON (X = 0..5)"); uartPutString("\n cx = PortC Bit X OFF (X = 0..5)"); uartPutString("\n Dx = PortD Bit X ON (X = 2..7)"); uartPutString("\n dx = PortD Bit X OFF (X = 2..7)"); uartPutString
-
Thread
Timmer Interrupt zu langsam.
LATB = 0x00; // PORT B Latchregister auf Null setzen // PORTC => alles Ausgänge RC0, RC1, RC2 TRISC = 0x00; // PORT C Ausgänge deklarieren PORTC = 0x00; // PORT C auf Null setzen LATC = 0x00; //
setzen LATB = 0x00; // PORT B Latchregister auf Null setzen // PORTC => Ausgänge TRISC = 0x00; // PORT C Ausgänge deklarieren PORTC = 0x00; // PORT C auf Null setzen LATC = 0x00;
-
Thread
ATMega644 extern INT0
interrupt.h> #include <util/delay.h> ISR(INT0_vect) { if (PIND & (1<<PD2)) {//logisch 1 PORTC ^= (1<<PC2); } else {//logisch 0 PORTC ^= (1<<PC3); } _delay_ms(200); } int main(void) { //LED's DDRC |= (1<<PC2) | (1<<PC3); //PC3 as output PORTC |= (1<<PC2)
-
Thread
Interrupt erwischt nicht immer alle Interrupts.
ISC01); Frequenzzaehler=0; //--Frequenzzähler nochmals auf 0 Setzen SET_BIT(PORTC,2); //--Reset Loslassen Delay_10ms(50); //--Kurz warten //--Frequenz berechnen //Periodendauer = (Frequenzzaehler/1000000.0); //Frequenz = ((1/Periodendauer
Frequenz = Frequenzzaehler; Frequenzzaehler = 0; CLEAR_BIT(PORTC,2); //--Reset erneut Ziehen //--Strom und Spannung hohlen Strom=get_Strom(); Spannung=get_Spannung(); //--R berechnen Widerstand = (Spannung
-
Thread
Atmega16-16AU
|21723763587|kword|atmega16-16au|match|p|plid| Ich versuche gerade zu Testzwecken den gesamten PORTC zu invertieren. Programm schaut folgerndermaßen aus: [c]#include <stdbool.h> #include <avr/io.h> #include <avr/interrupt.h> #include <D:\Projekt\_AVR\_Bibliotheken\delay.h> int main(void) { DDRC |= 0xff; while(1) { PORTC = 0x00; _delay_ms(10); PORTC = 0xff; _delay_ms(10); } } [/c] ich weiß dass das absolut nicht schön programmiert ist, aber es sollte eigentlich alle 10ms den gesamten PORTC
-
Thread
LEDs toggeln nicht richtig
initialisieren ldi r16, HIGH(RAMEND) out SPH, r16 ldi r16, LOW(RAMEND) out SPL, r16 ; PORTC als Ausgang ldi r16, 0xFF out DDRC, r16 ldi r16, 0xFF out PORTC, r16 ; PÓRT D als Eingang ldi r16, 0x00 out DDRD, r16 ; Pull-Up aktivieren ldi r16, 0xFF out PORTD
main: sbis PIND, 2 rcall switch_off rjmp main switch_off: mov r17, r16 in r16, PORTC com r16 out PORTC, r16 mov r16, r17 switch_off_: sbis PIND, 2 rjmp switch_off_ ret
-
Thread
ATmega32U2 läuft in Zeitlupe
Programm [c]#include <avr/io.h> #define F_CPU 16000000UL int main(void) { DDRC = 0xFF; PORTC |= (1 << 4); while(1) { PORTC ^= (1 << 4); } }[/c] laufen lasse, blinkt die LED an PC4 ungefähr im 5Hz Takt. Jemand eine Idee, was da schief läuft? Grüße, Max
-
Thread
Software-PWM stockt bei unpassender Updatefrequenz
COMPB-ISR etwas verkürze indem ich z.b. die Negationen bei PORTB &= ~ptr_PORTB_isr[pwm_cycle]; PORTC &= ~ptr_PORTC_isr[pwm_cycle]; PORTD &= ~ptr_PORTD_isr[pwm_cycle]; in die pwm_update Funktion auslagere. Erkennt da jemand einen Zusammenhang? lg PoWl
lösen. [c]ISR(TIMER1_COMPB_vect) { pwm_cycle++; PORTB &= ~ptr_PORTB_isr[pwm_cycle]; PORTC &= ~ptr_PORTC_isr[pwm_cycle]; PORTD &= ~ptr_PORTD_isr[pwm_cycle]; if(ptr_timing_isr[pwm_cycle] != 0) { OCR1B = ptr_timing_isr[pwm_cycle]; } else if(pwm_change) // <-- Syncronisation
-
Thread
Gründe für Reset beim PIC
else { m = 0; n = 0; PORTB.4 = 0; PORTC.2 = 0; } if (PRO.7 && n == 1) { m = 1; PORTC.2 =1; } }//if(TMR1IF) int_restore_registers } // Interrupt-Routine
TMR1IE =1; TMR1IF = 0; m = 0; n = 0; PORTB.6 = 1; PORTB.5 = 0; PORTC.1 = 1; // auf HI beim Reset for (;;) {} } [/c]
-
Thread
Cosinus Bereichsanpassung
void PortInit(void) { DDRD=0x00; //Eingang LDE;NDG DDRC=0xFF; //Ausgang W1-Zündung PORTC=0xFF; //Anfangszustand; lowactic DDRF=0x00; //Eingang AD-Konverter DDRB=0xFF; //Ausgang PORTB=0x00; } /****************************TIMER1-Initialisierung*****************/ void
Interrupts****************/ ISR (TIMER1_COMPA_vect) //Zündung erste Halbwelle { PORTC &= ~(1<<PC0); //T1 AN W1 Low Aktiv OCR1B = ALPHAnutz + 400; //ALPHAnutz + Zuendimpulsbreite; } ISR (TIMER1_COMPB_vect) //Löschen aller gezündeten Pins { PORTC
-
Thread
Debouncing 8 Keys und rotary encoder von P. Dannegger.
## EXTERNER INT0 ####################################### ISR(INT0_vect) { PORTC=~c; if(waitpind & (1<<waitportbit2)); c++; } //############################# EXTERNER INT1 ####################################### ISR(INT1_vect) { PORTC=~c;
DDRA=0xff; PORTA = 0xfe; DDRB=0xff; PORTB = 0xff; DDRC=0xff; PORTC = 0xff; while(1) { OCR1A = pgm_read_word(pwmtable+tmp); if( get_key_press( 1<<KEY7 )) PORTC ^= (1<<LED7); if( get_key_press( 1
-
Thread
Ultraschall Abstandsmessung mit HC-SR04
'Config für LCD-Ausgabe '16x2 gelb-grün Mikro mit BL an Port C Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.6 Config Lcd = 16 * 2 'Config Pina.1 = Output 'Porta.1 = 0 Trigger Alias Portd.1 Config Trigger = Output Zurueck Alias Pind.2 Config Zurueck = Input Config Pinc.5 = Output Portc.5 = 0 Trigger = 0 Waitms 2 Trigger = 1 Waitms 10 Trigger = 0 Starttime = Counter1 Waitus 210 While Zurueck = 1 Wend Endtime = Counter1 Trigger = 0 If Endtime > Starttime
-
Thread
DCF 77 Uhr mit CodeVision
Hallo Marcel, dank für deine schnelle Antwort. Oh ja, PortC glatt übersehen. Ich hab nur auf deine PortD Initialisierung gesehn, und dache du hast alles über einen Port abgewickelt. Ich nutze auch CodeVision und bin auch schon über einiges gestolpert bezüglich
Eeine andere PORT benutzen ist hier nicht im frage, weil das problem lag ja darin das ich das LCD PORTC NICHT mehr benötigde. Das programm lief ja WEIL da ein LCD display an PORTC an lag. Der LCD ansluss WAHR der absluss wiederstand den ich rauszog. War doch net wen du das mahl versugen kontest. Auw
-
Thread
Mega16 LCD an PortC funktioniert nicht (JTAG ist deaktiviert!)
Hallo, befor es zu Missverständnissen kommt: Ja, ich habe das Forum nach dem Problem durchsucht und ja, ich habe mehrere Beiträge dazu gefunden. Allerdings liegt es bei mir nicht am JTAG! Bei meinem alten Layout war das LCD-Display an Port B angeschlossen und hat funktioniert. Beim neuen Layout ist das Display an Port C angeschlossen und es funktioniert nicht, obwohl JTAG in Ponyprog deaktiviert wurde. Woran kann es noch liegen? Schonmal Danke im Vorraus, Dani
-
Thread
atmega32 - PORTC PC0/PC1
Hallo erstmal, ich versuche gerade 2 leds an den PORTC PC0/PC1 meines atmega32 anzuschliessen. Das sind die zwei TWI pins. Muss man da irgend etwas beachten ? Den die beiden Pins geben keinen mucks von sich. Die restlichen Pins an PORTC funktionieren
-
Thread
Timer0 Atmega16
zählerstart bei 100 (zählt immer bis 255) TCCR0 = 0x05; //start timer (Systemtakt / 1024 ) PORTC =0x00; sei(); } int main(void) { init_timer1(); TIMSK |=(1<<TOIE0); while(1) { DDRC=0x01; } }
Hi Kann es sein, das du Probleme mit den Funktion von DDRC und PortC hast? MfG Spess
-
Thread
LED Cube Multiplexing mit Interrupt
Schreibs mal so [C] ISR (TIMER0_OVF_vect) { PORTC = 0; // alles abschalten i++; if (i==4) i=1; if (i==1) { PORTD = PORTB = 0; // PORTD und PORTB: Spalten PORTC = (1<<PC0); } else if (i==2) { PORTD = PORTB = 0; PORTC = (1<<PC1); } else if (i==3) { PORTD = PORTB = 1; PORTC = (1<<PC2); } } [/C] Dadurch verschaffst du nach dem Abschalten der Ebene ganz am Anfang der Elektronik ein
-
Thread
Verzögerung der Input-Latches beim AVR
@ Joerg Wolfram (joergwolfram) >out PORTC,r16 >in r17,PINC Da muss ein Takt Pause dazwischen. http://www.mikrocontroller.net/articles/AVR-Tutorial:_IO-Grundlagen#Stolperfalle_bei_Matrixtastaturen_etc. MfG Falk
increment address and read low nibble in r17,PINA ;read high nibble from last byte out PORTC,r17 ;out to video port out PORTA,r18 ;cmd for read high nibble in r17,PINA ;read low nibble out PORTC,r17 ;out to video port ... [/avrasm] Gruß Jörg
-
Thread
PIC16F1517 - Wechsel Signalpegel
Alle Bits liegen im selben Byte. bit RS @ PORTC.2; // Ausgang bit RW @ PORTC.1; // Ausgang bit EN @ PORTC.3; // Ausgang TRISC = 0b.1110.0001;
-
Thread
ATMega8 Programmerklärung
FOLGENDES PROBLEM: #inlude <avr/interrupt.h> static char tim0=255; int main(void) { DDRC=1;PORTC=0 TCCR0=4; TCNT0=tim0++; TIMSK=1; sei(); //Interrupt einschalten while(1) } ISR (TIMER0_OVF_vect) { TCNT0=tim0++; PORTC^=1; } -->Was bewirt dieser Code Wäre sehr
ja der code ist ein wenig unsauber, wenn er denn gehen sollte dann schaltet am Ausgang PORTC das Bit 1 immer mal zwischen 0 und 1 um, das ganze mit verschienden intervallen. @Tobias > Auf den ersten Blick mindestens zwei Compilerfehler. Sicher? Oder Bloss Warnungen?
-
Thread
Problem mit der Portinizialisierung
void initport(void) { DDRC = 0xff; // Alle Pins des Ports D als Ausgang definieren PORTC |= (1<<PC2); // PC2 auf high setzen } int main(void) { initport(); // DDRC = 0xff; // Alle Pins des Ports D als Ausgang definieren // PORTC |= (1<<PC2); // PC2 auf high setzen while(1) { PORTC &= ~(1<<PC2); // PC2 auf low setzen _delay_ms(1000); // Eine Sekunde +/-1/10000 Sekunde warten... PORTC |= (1<<PC2); // PC2 auf high setzen _delay_ms(1000);
-
Thread
UART -> MAX232
; const char TE = 't'; DDRA = 0x00; DDRC = 0xFF; while(1) { _delay_ms(50.); PORTC = 0xFF; _delay_ms(50.); PORTC = 0x00; while(!(UCSRA & ( 1 << UDRE))) {} PORTC = 0xff; PORTC = 0x00; if(PINA & 0x1) { UDR = NK; } else if(PINA & (1 << 1)){
-
Thread
Problem mit Tastereinlesung
delay_ms(30); // zum entprellen if((PIND.5 == 0)&&(modus_hoch == 0)) { modus_hoch = 1; PORTC.3 = 1; // LED als Anzeige } if((PIND.5 == 1)&&(modus_hoch == 1)) { modus_hoch = 0; PORTC.3 = 0; } } Dabei ist "modus_hoch" eine globale "unsigned char" Variable
if(PIND.5 == 0) { switch (modus_hoch) { case 0: modus_hoch = 1; PORTC.3 = 1; break; case 1: modus_hoch = 0; PORTC.3 = 0; break; } } } Aber auch das klappt nicht :o( Ich geb für heute auf!! Morgen sieht die
-
Thread
avr gcc -sensor on SPI - Problem
Deine Read-Sensor-Routine sollte also so aussehen: unsigned char readSensor(void){ CLEARBIT(PORTC,PC3); /* enable sensor*/ SPDR = DUMMY; /* irgendwas in SPDR schreiben */ while(!(SPSR & (1<<SPIF))) /* wait for transmission complete*/ SETBIT(PORTC,PC3); /*
wichtig: return ganz am Schluss! */ } Das Return UNBEDINGT ganz am Schluss: bei Dir wird SETBIT(PORTC,PC3) gar nie ausgeführt! Stefan
-
Thread
Mit Watchdogreset zum Bootloader springen
value = pgm_read_byte(&font[data[digit]]); //Alle Segmente auschalten PORTD |= PD2_7; PORTC |= 1 << PC3; //Backplane wechseln PORTB &= ~PB0_1; PORTB |= digit2; //Segmente setzen PORTD &= (~(value & 0b00111111)) << 2; PORTC &= (~(value & 0b01000000)) >> 3; }
//Tasten initialisieren DDRC &= ~(( 1 << PC1 ) | ( 1 << PC2 )); //Eingänge definieren PORTC |= ( 1 << PC1 ) | ( 1 << PC2 ); //Interne PullUps zuschalten StartTimer(); //Prescaler 1024 //Maximale "Drück"-Frequenz wird mit F_CPU / 256 / Prescaler / SOFT_PRESCALER ausgerechnet
-
Thread
Assemler PIN-Nummer an Subroutine übergeben
toggle_5 toggle_1: cpi r18, PORTB brne toggle_2 in r17, PINB rjmp toggle_5 toggle_2: cpi r18, PORTC brne toggle_3 in r17, PINC rjmp toggle_5 toggle_4: cpi r18, PORTD brne toggle_error in r17, PIND rjmp toggle_5 toggle_5: eor r17, r16 cpi r18, PORTA brne toggle_6 out PORTA, r17 rjmp
toggle_end toggle_6: cpi r18, PORTB brne toggle_7 out PORTB, r17 rjmp toggle_end toggle_7: cpi r18, PORTC brne toggle_8 out PORTC, r17 rjmp toggle_end toggle_8: cpi r18, PORTD brne toggle_error out PORTD, r17 rjmp toggle_end toggle_error: toggle_end: ret [/avrasm]
-
Thread
Mikrocontroller hängt Interrupt schuld?
mit den anderen Befehlen in der While.Schleife aufrufe, bekomme ich keine Werte mehr, die LEDS an PORTC zählen nicht mehr auf und ab (Das Menü im Display auch nicht mehr)??? Warum ruft die Funktion encode_read2() keine werte mehr ab?
++) { if( debounce( PIND, PD6 ) ) D_taster ^= 1<<PB1; //toggle/schreibe PB1 in PORTC PORTB = D_taster; } hier genau das selbe. poste mal den quelcode für cli() und sei() vielleicht ist dort irgendwas faul. Mfg Jazon
-
Thread
Denkfehler? Pointer?
Weise konfiguriere, klappt es?! [c] void SpiMasterInit(*SPI,x,x,x,x); { SPI->PORTC.OUT |= (1<<SPI->MOSI); } [/c]
SPI.PORT = PORTC; So bekommt SPI.PORT den Wert der in PORTC steht. Du musst einen Zeiger auf PORTC nehmen.
-
Thread
Probleme mit meinem LCD-Display
DDRC Register, also SDA und SCL (AD4 und AD5) , die Pins auf 0 Stellen also Eingang und dann mittels PORTC auf 1. Dann sind die Pullups aktiviert
Register, also SDA und SCL (AD4 und AD5) , die Pins > auf 0 Stellen also Eingang und dann mittels PORTC auf 1. > > Dann sind die Pullups aktiviert UPDATE: Wenn man sich dazu entschließt die internen Pullups zu verwenden ist es wichtig zuerst diese zu aktivieren, bevor man den LCD initialisiert
-
Thread
Inbetriebnahme ENC28J60 Radig/RoeBue Arduino nano3
command_setvar}, {"TIME",command_time}, //{"PING", command_ping}, {"PORTB",command_portb}, {"PORTC",command_portc}, {"PORTCSET",command_setPORTC}, [/code] diese Befehle werden wohl über die serielle Schnittstelle gegeben. Bisher habe ich mit HTERM noch keinen großen Effekt festgestellt wenn
-
Thread
c't-Bot Display ansteuern mit BASCOM
die selben Pins teilen. µC-Pin Schieberegister LCD ------------------------------------ PORTC.0 Data RS PORTC.1 Load R/W PORTC.2 Clock Enable Da vor meinen eigenen Programmierversuchen bereits ein Testprogramm auf dem c't-bot lief, weiß
------------------------------------------------------ 'Schieberegister gemeinsam Sr_load Alias Portc.1 : Config Sr_load = Output Sr_data Alias Portc.0 : Config Sr_data = Output 'Schieberegister LED Led_clock Alias Portc.4 : Config Led_clock = Output Dim Leds As Byte : Leds = &B0000_0100 Dim
-
Thread
LCD_Ansteuerungsproblem_im_Multitasking_Betrieb
Hallo! Ich benutze einen atmega32 und 1 displaytech 162 LCD-Modul. Möchte dieses dann direkt über PORTC des avrs ansteuern. Gleichzeitig sind an PORTC 4 Tasten angehängt. Dies bedeutet automatisch, dass diese PINS auf high sind. Habe folgendes Problem: Mein Programm sollte durch Betätigen einmalig
Hallo. Nein reicht nicht, denn PORTC muss zugleich Tasteneingänge und als LCD-port dienen. Das andere ist nur figurativ gesehen. Meine Frage war andersrum, ob nämlich etwas an den LCD-funktionen falsch ist gruß
-
Thread
TWI Initialisierungsproblem
*Formale Kontrolle des Quelltextes* // #1 PORTC.DIRSET |= PIN0_bm; // Als Ausgang TWI SDA PORTC.DIRSET |= PIN1_bm; // Als Ausgang TWI SCL // #2 PORTD.PIN0CTRL=PORT_OPC_WIREDAND_gc | PORT_ISC_BOTHEDGES_gc; PORTD.PIN1CTRL
TWI_MASTER_INTLVL_HI_gc,TWI_BAUDSETTING); *Hardware* In #1 nimmst du an, dass TWI an PORTC angeschlossen ist. Bei #3 benutzt du aber TWID. Wie ist die Hardware wirklich angeschlossen? In #2 konfigurierst du PORTD und in #3 benutzt du PORTD für TWI. Beissen sich die Einstellungen oder
-
Thread
DCF77 Code, Paritätsprüfung klappt nicht
].Zahl=0; } } void Ausgabe(segment *segstr) { static short int Z=0; Z++; PORTC=0x00; PORTA=0xFF; switch(Z) { case 0: PORTC=0x04; //Einer Sek BCDDecode(&segstr[0]); break; case 1: PORTC=0x08; //Zehne Sek BCDDecode(&segstr[1]); break; case 2: PORTC=0x10; //Einer Min BCDDecode(&segstr[2]); break; case 3: PORTC=0x20; //Zehne Min BCDDecode(&segstr[3]); break; case 4: PORTC=0x40; //Einer Std BCDDecode
-
Thread
Wie kann ich Daten von einem Register aufsplitten ?!
KS0108B) halbwegs anzusteuern (manuell, also sprich per feste befehle). Das Problem ist das DB0-3 an PortC und DB4-7 an PortB liegen. Gibt es eine möglichkeit, das ich z.b. ein Register wie z.b. 0b11110000 so aufzusplitten, das jetzt die ersten bits 0-3 auf PortC Pin 2-5 ausgegeben werden und die anderen
du dann erst eine UND Verknüpfung mit 1111 0000 und schiebst sie dann 2 stelle nach rechts und mit Portc ODER verknüpfen. Mal dir das mal auf einem Blatt Papier auf, da sieht man das gut. MFG Dieter
-
Thread
ATmega88 mit CTC Modus
Alles Ausgaenge DDRC |= (1 << DDC0) | (1 << DDC1) | (1 << DDC2) | (1 << DDC3) | (1 << DDC4); //PORTC 0,1,2,3,4 Ausgaenge while(1) { // eigentliches Programm } } [/C]
Alles Ausgaenge DDRC |= (1 << DDC0) | (1 << DDC1) | (1 << DDC2) | (1 << DDC3) | (1 << DDC4); //PORTC 0,1,2,3,4 Ausgaenge while(1) { PORTD = 0b10000000; // mit ULN2803 verbunden, schaltet gemeinsame Kathode der Segmentanzeige auf Ground PORTC = 0b00000001
-
Thread
AD-Wandlung dauert zu lange (30µs) [Atmega32]
Datenblatt angegebenen 7µs? [c] ISR(TIMER1_OVF_vect) //Wird bei pos. PWM-Flanke ausgeführt { PORTC |= (1<<PC0); // Pin high für Zeitmessung des ADC´s am Oszi ADCSRA |= (1<<ADEN); //ADC enable ADCSRA |= (1<<ADSC); //ADC starten } ISR(ADC_vect) { UIST = ADCW; // Wert holen ADCSRA &= ~(1<<ADEN); // ADC deaktivieren PORTC &= ~(1<<PC0); // Pin low, Zeitmessung ende messen = TRUE; // Berechnung freischalten } main: { .... ADMUX = 4; // Kanal waehlen ADMUX |= (1<<REFS0); // interne Referenzspannung nutzen
-
Thread
[AVR Anfänger] taster an PA0 bringt atmega zum absturz
init_uart0( (u16)(XTAL / BAUD / 16 - 0.5) ); sei(); delay_1ms(300); while(1) { PORTC |= (1 << PC2); delay_1ms(300); PORTC &= ~(1 << PC2); switch(ssw) { // init case 0: uputs0("Init\n\r"); relais_off(); led_red_on()
led_green_off(); ssw = 1; break; // warte auf taster case 1: PORTC |= (1 << PC1); delay_1ms(300); PORTC &= ~(1 << PC1); if ((PINA & (1 << PINA0)) == 1) { if(relais == 0) { relais = 1; ssw = 2;
-
Thread
For schleife verhält sich seltsam
DDRD, &PORTD, 1<<PD5, 0, 1, 0}, // 8 {&DDRD, &PORTD, 1<<PD4, 0, 1, 0}, // 9 {&DDRC, &PORTC, 1<<PC0, 1, 1, 3}, // a --4 {&DDRC, &PORTC, 1<<PC1, 1, 1, 7}, // b --8 {&DDRC, &PORTC, 1<<PC2, 1, 1, 5}, // c --6 {&DDRC, &PORTC, 1<<PC3, 0, 1, 0}, // d {&DDRC, &PORTC, 1<<PC4, 0, 1, 0}, // e {&DDRD, &PORTD, 1<<PD0, 0, 1, 0} // f }; uint8_t pwmtable_8D[32] PROGMEM = {0, 1, 2, 2, 2, 3, 3, 4, 5, 6, 7, 8, 10, 11,
-
Thread
Problem mit externer ADwandler und Atmega16
Hallo ich habe die 8bit Ausgänge von externer adwandler an PORTC von Atmega16 angeschlossen.adwandler funktioniert gut das problem liegt daran wenn ich die 8bit werte aus dem PORTC lesen will und damit ein LED anschalte bleibt der LED an auch wenn ich den Wert
LED1); } } void init_ports() { DDRD=0xFF; //PORTD als Ausgang PORTD =0x00; DDRC=0x00; //PORTC als Eingang PORTC =0xFF; } unsigned char ADC0809(unsigned char channel) { unsigned char adwert; unsigned char j; if ( channel == 0 ) { PORTA &= ~ ( 1 << A) | ( 1 << B) | ( 1 <
-
Thread
LCD Testroutine gesucht...
wait150us ; ldi temp1,lcdclear ; rcall sendebefehl loop: rjmp loop sendebefehl: cbi portc,RS rcall ausgabe ret sendedaten: sbi portc,RS rcall ausgabe ret ausgabe: out portc,temp1 sbi portc,E nop nop nop cbi portc,E ret ; **** Zeitschleifen **** wait50us
-
Thread
einzelne bits ändern in einem Array oder komplett anders ?
und eine LED Matrix 5x7. einzeln bekomme ich beide angesteuert. Die LED Matrix ist an PORTD und PORTC angeschlossen an PORTD die Reihen und an PORTC die Spalten, welche gemultiplext sind. Nun wollte ich aber jetzt die mit es leicht machen um bequem die LEDs durch ein Array schalten. Mein Array
TCNT1H = 0x00; //auf 0 setzen ms_100++; if(ms_100 == 250){ PORTB ^= (1<<PB1) ; PORTC = LED_Array[Mask]; PORTD = CulCodes[Mask]; Mask++; if(Mask==5) Mask=0; ms_100 = 0; } } [/c]
-
Thread
Atmega16 Fehler bei Pin 4 und 5 an PortC
allen Pins ausser an 4 und 5 eben nicht: DDRC = 0xff; void main () { while (1) { PORTC |= (1<<PC1); //Funktioniert mit Pin 0,2,3,6,7 ebenfalls _delay_ms(100) PORTC &= ~(1<<PC1); _delay_ms(100) } } Woran kann es liegen, das ich jeden Pin an PortC mit Code programmieren
Patrick wrote: > Woran kann es liegen, das ich jeden Pin an PortC mit Code programmieren > kann nur eben PC4 und PC5 nicht??? Daran, dass das JTAG-Interface noch aktiv ist. Siehe auch [[AVR Checkliste]]
-
Thread
Serielles Protokoll testweise lesen
oscilloscope testing phys.set(510, 0b10101010); phys.set(511, 0b01010101); DDRC = 0xFF; PORTC = 0xFF; sei(); phys.start(); while (1) { } }[/c] phys-m644.hpp [c]#ifndef SRC_DMX_PHYS_M644_HPP_ #define SRC_DMX_PHYS_M644_HPP_ #include <stdint.h> #ifndef DMX_BAUD /// Baud
this->rx_state = DMX_BREAK; return; } // break detected, toggle LEDs PORTC ^= 0xFF; this->rx_state = DMX_START; break; default: // ignore pin change this->rx_state = DMX_BREAK; break; } } void Phys_m644::rx_update_state_uart
-
Thread
Brauche Hilfe AT Mega 8 im Raum Bremen evlt. vor Ort
Als ERSTE Maßname würde ich den Code etwas straffen. Oft erkennt man Sequenzen wie [c] PORTC=4; waitMs(500); PORTC=0; waitMs(200); [/c] Hier soll wohl das Ventil 4 für 500ms betätigt werden. Wieso schreibts du hier nicht [c] ventil(4, 500); waitMs(200); [/c] und definierst dir eine Funktion [c] void ventil(int ventil_nr, int dauer) { PORTC = ventil_nr; waitMs(dauer); PORTC = 0; } [/c] in deinem Code steht dann [c] ventil(4, 500); waitMs(200); [/c] Der Programmcode reduziert sich damit auf ca. die Hälfte - und
-
Thread
Hilfe bei C-Code ( Beginner )
Steckbrett aufgebaut, Die Eingänge (PORTD - 8 Taster) sind jeweils invertiert sowie auch die Ausgänge ( PORTC - 8 LEDs ) invertiert sind. Nach einigen Lauflichtern wollte ich einmal etwas komplexeres schreiben mit dem ich z.b. einzelne programme auf verschiedene taster lege. Das klappt soweit auch im Moment
Interupteingängen. Hier mal kurz wie was ging : interrupt [2] void external_int0(void) { PORTC = 0x80 ; delay_ms(200); PORTC = 0x08 ; } Ich habs auch schon geschafft nen Tiemr laufen zu lassen allerdings läßt der sich nur auf minimal 6kHz einstellen und ich weiß nicht wie nun dieser "Timer
-
Thread
Empfangen über UART mit ATmega32
define F_CPU 16000000// Angepasst 16MHZ int main(void) { unsigned long a; DDRC=0xFF; PORTC=0xFF; usart_init(9600); // Einstellung der Baudrate usart_write("\n\r!!!ACHTUNG SYSTEM WIRD GESTARTET!!!\n\r"); //Über die UART ausgeben usart_write("\n\r"); // Leerzeile usart_write
offenbar so zu benutzen [C] .... int main() { unsigned long a; DDRC = 0xFF; PORTC = 0xFF; usart_init(9600); // Einstellung der Baudrate usart_write("\n\r!!!ACHTUNG SYSTEM WIRD GESTARTET!!!\n\r"); //Über die UART ausgeben usart_write("\n\r"); // Leerzeile usart_write
-
Thread
AVR, Structs zur Laufzeit reservieren
//Encoder Inputs struct encoder_devices encoders[]= { {&variables[10], &virtual_port[OFFSET_PORTC + 0], 0, &virtual_port[OFFSET_PORTC + 0], 1, 0, 60, 1, 0}, /*verweist auf Variable20, portc Ungruppiert, Pin0, portc Ungruppiert Pin1, min 0, max 60, increment 1, kein Modulo*/ }; [/c] Im