-
Thread
Atmega Dynamische Portzuweisung in Schleife
Was so nebenbei nicht geht ... PORTA |= (....); Bedeutet Read - modify - write Und das geht so nicht. Denn wenn man das Port A lesen moechte muss man PINA lesen. Also eher : PORTA = PINA | (..)
Name H. schrieb im Beitrag #5658342: > Bedeutet Read - modify - write > > Und das geht so nicht. Na klar geht das. Der AVR hat sogar extra Befehle dafür (SBI, CBI).
-
Thread
I2CEprom 24LC512 Page Write Bascom - TWI Experten gesucht
Manfred S. schrieb im Beitrag #2331152: > Acknowdlege Polling geht sicherer so: Was ist sicherer ? Wenn die I2C-HW zuverlässig funktioniert, dann geht die einfachste Version, wenn Err = 0 ist, dann wurde der Befehl erfolgreich ausgeführt. Was soll da unsicher
immer noch Sicherheiten, Zähler, Timeouts, etc. dazu bauen. War aber nicht die Frage, die war: Wie geht's mit Bascom-Mitteln ?
-
Thread
ASM oder C programmieren?
C oder gleich C++ damits in der entwicklung schneller geht. asm nimmt man im äußersten notfall noch, wenn es wirklich auf die letzte µs ankommt (wobei man da dann einfach ne andere hardware nimmt )
Natürlich enthält ein OS auf dem PC Assembler, aber das programmiert man ja nicht selber. Es geht ja hier um die Anwendungsprogrammierung und nicht um ein OS. Peter
-
Thread
Drehgeber code
jallist/message/26296 und das war's. Aber danke für eure Antworten, Ich werde ausprobieren ob es geht die pins auf diese Weise zu ändern.
konstanten Ausdruck, den Du da einsetzen sollst. Wenn z.B. der eine Pin (A) Pin 5 auf auf PORTC ist, und der andere Pin (B) Pin 5 auf PORTD ist: OldEncoderValue = ((PORTC >> 5) & 0b0000001) | ((PORTD >> 4) & 0b00000010)) Falls B auf Pin 1 liegt, kannst Du den Shift-Operator auch weglassen
-
Thread
[BASCOM] Mal geht mein Taster, mal nicht
Problem: Ich habe 3 Taster und immer den gleichen µC. Ich ändere nur das Programm... Bei Programm 1 geht es, bei Programm 2 nicht. Hier meine Programme: Programm 1: Siehe Anhang: timer_control_panel Programm 2: Siehe Anhang: schieberegister_test Klar, ihr müsst jetzt nicht mein komplettes
wesentlichen Unterschied in diesen Zeilen: > If Pinc.5 = 0 And Gedruckt(1) = 0 Then Taster geht. > If Portc.5 = 0 And Gedruckt(1) = 0 Then Taster geht nicht.
-
Thread
LCD kaputt? Text bleicht aus
Auszug) $regfile = "m8def.dat" $crystal = 4000000 CConfig Lcdpin = Pin , Db4 = PortD.2 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.5 , Rs = Portc.4 Config Lcd = 24 * 2 Config Lcdbus = 4 Cursor = Off Config Adc = Single , Prescaler = Auto Dim Adc_vh As Byte Dim W_vh As Word
NUn gehts $regfile = "m8def.dat" $crystal = 4000000 Config Lcdpin = Pin , Db4 = Portb.5 , Db5 = Portb.4 , Db6 = Portb.3 , Db7 = Portb.2 , E = Portb.0 , Rs = Portb.1 Config Lcd = 24 * 2 Config Lcdbus =
-
Thread
Atmega16 + DS18B20 + Timer = LCD Zeichenwirrwarr?
standart aus Ebay) - Atmega16 - Stabile 5V Spannungsversorgung Das Display hängt an: Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.3 , Db7 = Portc.7 , E = Portc.1 , Rs = Portc.0 Der 1wire Bus ist auf Pin D6. Wenn ich die Routine ohne Timer1 aufrufe, ist alles bestens, das LCD stellt die Werte
Versuch mal 10s Intervall. Wenn das geht, dann schrittweise verkleinern.
-
Thread
8x8 Matrix Laufschrift
Hallo Georg, das geht schon mit einer Matrix Lauftext anzusehen, Zielführend war bei mir die für mich passende Scrollgeschwindigkeit zu wählen. Do kann ich einfach 5 Zeichen + 1 Leerzeichen anzeigen. georg schrieb im
Spalte aktivieren switch (spalte) { case 0: PORTC |= (1<<PC3); break; case 1: PORTC |= (1<<PC4); break; case 2: PORTC |= (1<<PC5); break; case 3: PORTC |= (1<<PC6); break; case 4: PORTC |= (1
-
Thread
Diamex ISP will nicht
unter Systemsteuerung/System/Hardware/Gerätemanger ob der Jungo Treiber installiert ist, ohne den gehts nicht.
angeschlossen. Jetzt konnte folgenden Code flashen [code] $regfile = "m328pdef.dat" Config Portc.5 = Output Do Portc.5 = 1 Waitms 800 Portc.5 = 0 Waitms 800 Loop End [/code] Jetzt blinkt meine LED aber nicht in einem 800ms Abstand (immerhin blinkt sie
-
Thread
Finde Fehler nicht !
of yellow LED { // if OFF PORTC |= (1<<PC1); // yellow LED ON _delay_ms(100); } else { // if ON PORTC &= ~(1<<PC1); // yellow LED OFF _delay_ms(100); } break; /* case 3: _delay_ms(20); if ((PINC & (1<<PC2))==0 )
--------------------------------------------------------*/ // pushbutton on PORTB 1 // LED on PORTC 0 #include <avr/io.h> #include <util/delay.h> int main (void) { DDRC &= ~(1<<DDC1); // set PORTC1 for input other keep unchanged DDRC |= (1<<DDC0); // set PORTC0 as OUTPUT for LED
-
Thread
Button geht nur manchmal (selten!)
gedrückt halten geht?! Hat jemand ne Idee was ich falsch machen? Danke im Voraus!
getastet sind. Du musst dich auf den einen Pin konzentrieren an dem dein Taster hängt! Wie das geht steht im Artikel http://www.mikrocontroller.net/articles/AVR-Tutorial:_IO-Grundlagen#Zugriff_auf_einzelne_Bits
-
Thread
Ausgang des Atmega32 definieren
Also neuer Versuch damit: [c]#include <avr/io.h> void main( void ) { DDRC = 0xff; PORTC = 0; while( 1 ) { if( PINA & (1<<PA4) ) // Taste gedrückt? { PORTC = 0xff; // Ja: Leds einschalten } else { PORTC = 0x00; //
> DDRC = 0xff; > PORTC = 0; PORTA |= (1<<PA4); // Pullup einschalten
-
Thread
Problem: Stoppuhr in C (Interrupts und Pull-Ups)
PORTA = zahl[sek[0]]; //Port für 10er Sekunden PORTB = zahl[sek[1]]; //Port für Sekunden PORTC = zahl[sek[2]]; //Port für 1/10 Sekunden PORTD = zahl[sek[3]]; //Port für 1/100 Sekunden } } ... [/c]
Habs jetz nochmal so geändert wie Matthias Lipinsky (lippy) es beschrieben hatte. Geht auch super und der Code ist noch etwas kürzer und übersichtlicher. Vielen Dank nochmal an jeden der so gut weiter geholfen hat!
-
Thread
Problem mit ATmega164A und LCD FDCC1601E
LCD_RW_PORT PORTC /**< port for RW line */ #define LCD_RW_PIN 1 /**< pin for RW line */ #define LCD_E_PORT PORTC /**< port for Enable line */ #define LCD_E_PIN
Hallo Uwe, daas mit dem 2 x 8 Zeichen war das Problem! Display geht jetzt danke! Gruß Arne
-
Thread
LCD Problem mit blafusel´s Routinen
delay_loop_2 (((F_CPU/4000)*us)/1000) // wartet µs void lcd_write_init(uint8_t data) { PORTC = (data>>4); // output high nibble only,(!) zzgl. Zustand für RS-Leitung lcd_flash_e (); } // Enable-Leitung toggeln void lcd_flash_e () { PORTC = PORTC | ( 1<<DDC5 ) ; // Enable
Nach Strom weg, Strom drauf ist wieder alles beim alten.... Nix geht mer -.- Ich verzweilfel langsam -.-
-
Thread
AVR-Port über Funktionswert konfigurieren
aus, dass die Zentrale nichts darüber weiß und auch nicht wissen soll, dass das auf dem AVR zb der PORTC und dort der Pin 0 ist. Die Zentrale arbeitet einfach nur mit abstrakten, virtuellen Nummern. Es sagt dem AVR: schalte den Anschluss 5 auf Ausgang, und der AVR muss dann selbst wissen, dass das PORTC
DDRB, &PORTB, &PINB, 1<<PB4 }, // 4 { &DDRB, &PORTB, &PINB, 1<<PB5 }, // 5 { &DDRC, &PORTC, &PINC, 1<<PC0 }, // 6 { &DDRC, &PORTC, &PINC, 1<<PC1 }, // 7 { &DDRC, &PORTC, &PINC, 1<<PC2 }, // 8 { &DDRC, &PORTC, &PINC, 1<<PC3 }, // 9 { &DDRC, &PORTC, &PINC, 1<<PC4 },
-
Thread
Software PWM Bascom
Toggle Portc.1 If Pwmwertoff = Timer0 And Timerwert = 1 Then Toggle Portc.1 If Timerwert = 1 Then Timerwert = 0 Print Timer0 Lcd Pwmwerton Loop End Ablauf: Incr Timerwert Return [/pre]
funktioniert es immer noch nicht. [pre] Do Pwmwertoff = 255 - Pwmwert If Pwmwert => Timer0 Then Set Portc.1 If Pwmwertoff => Timer0 And Timerwert = 1 Then Reset Portc.1 If Timerwert = 1 Then Timerwert = 0 Loop [/pre]
-
Thread
Nochmal Analog Comparator
mit, dann schwimmt er und bricht schließlich ab. dreht man den pegel hoch, macht ers wieder. das geht manchmal bis hoch auf 2.5 V. schaltet man alles ab und wieder an, gehts von vorne los. was um himmels willen kann das sein?! mz
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.
-
Thread
2 Microcontroler 10 Schalter 10 Leds wenige leitungen?
0b00000000 out DDRB, r16 main: in r16, PINB sbrs r16, 3 rjmp main rjmp daten1 daten1: sbi PORTC, 0 cbi PORTC, 1 sbi PORTC, 2 cbi PORTC, 3 sbi PORTC, 4 rjmp main [/avrasm] sind dann 5 leitungen dann einem 2ten µC beibringen.. das er schalten soll wenn PORTC, 0 PORTC, 2 PORTC, 4 am eingang high sind geht sowas ? oder sollte ich das ganze ganz anders angehen ????
-
Thread
Mit dem ATmega8 Text auf einen Drucker ausgeben klappt nicht.
DDRA = 0xFF; // Daten-Port DDRC |= (1<<STROBE_PIN) // Strobe-Port PORTC |= (1<<STROBE_PIN); for(i=0; i<strlen(text); ++i) { PORTA = text[i]; PORTC &= ~(1<<STROBE_PIN); _delay_ms(3); PORTC |= (1<<STROBE_PIN); } [/c] bitte nur als Anregung mitnehmen
DDRA = 0xFF; // Daten-Port > DDRC |= (1<<STROBE_PIN) // Strobe-Port > PORTC |= (1<<STROBE_PIN); > > for(i=0; i<strlen(text); ++i) > { > PORTA = text[i]; > PORTC &= ~(1<<STROBE_PIN); > _delay_ms(3); > PORTC |= (1<<STROBE_PIN); > } [/code] das wuerde
-
Thread
Register von uCs Gesperrt
zumindest hab ich es daraus nicht erlesen, darum fragte ich vorsichtshalber nach, bevor da was kaputt geht.
Bastelecke schrieb im Beitrag #2149622: > Ist der Register für PORTC beim uC in Wahrheit auch 8bit groß, nur er > verwendet blos die 7bits zum Senden eines Pegels später an die durch > PORTC vertretenen Beinchen des uCs? Die Register sind immer 8 Bit. Bei PORTC
-
Thread
Sonderbares Timer-Verhalten
Nichts tun } } ISR(PCINT3_vect) { //Timer auf Anfang, Pins auf HIGH TCNT1 = 0; PORTC |= (1<<PC6); } ISR(TIMER1_COMPA_vect) { //Pins auf LOW PORTC &=~ (1<<PC6); } [/c] Wenn ich dieses Programm ausführe, gibt es kein Problem, der Pin ist immer schön für 600µs auf HIGH. Wenn ich allerdings am Ende der Timer-ISR noch einige 'NOPs' hinzufüge geht das ganze plötzlich nicht mehr: [c] ISR(TIMER1_COMPA_vect) { uint16_t i; PORTC &=~ ((1<<PC6) | (1<<PC4) | (1<<PC5)); for(i = 0; i<10000; i++) { asm volatile ("NOP
-
Thread
atmega 1284P Jtag (aus) PINC2 ohne Funktion
led_gelb_aus PORTD &= ~(1<<PD1) #define led_gruen_aus PORTD &= ~(1<<PD5) #define test1_aus PORTC &= ~(1<<PC2) #define test2_aus PORTC &= ~(1<<PC3) #define test3_aus PORTC &= ~(1<<PC4) #define test4_aus PORTC &= ~(1<<PC5) #define test1_an PORTC |= (1<<PC2) #define test2_an PORTC
schlage ich ein Testprogramm vor [C] #include <avr/io.h> int main() { DDRC = 0xFF; PORTC = 0xFF; while( 1 ) { } } [/C] wenn da der Pin sauber auf 1 geht, dann gibt es in deinem Programm einen Fehler, der sich irgendwo in dem Wust an unübersichtlichem Code versteckt.
-
Thread
Thermomter DS18b20
BASCOM gibt > es dafür anscheinen keinen Befehl. Naja, das ist ja auch nicht richtig: Config Portc.0 = Input Config Portc.1 = Input Config Portc.2 = Input Es muß heißen: config Pinc.0 = Input config Pinc.1 = Input config Pinc.2 = Input Pull-up Widerstände kann man dann als Nächstes so einschalten: PortC = &B00000111 Das schaltet die Ziehwiderstände an PortC 0, 1 und 2 ein und läßt den Rest in Ruhe. MfG Paul
-
Thread
Verstehe GCC nicht
uint8_t i = DisplayRow; if (++i >= 15) i = 0; // 100Hz DisplayRow = i; // 1.) PORTC = (PORTC & ~ROW_MASK) | (i << 3); // 2.) uint8_t* p = (uint8_t*)&DisplayRAM[i]; uint8_t v; SPDR = p[1]; v = p[0]; while (!(SPSR & (1 << SPIF))); SPDR = v; v = p[
Bits immer NULL sind (kann entfallen) if (i >= (15*8)){ i = 0; } DisplayRow = i; PORTC = (PORTC & ~ROW_MASK) | i; Gruß, Stefan
-
Thread
Input auslesen
Hi >data = PORTC & (1 << 2); PINC ist das Eingangsregister. Außerdem muss JTAG deaktiviert werden, denn das benutzt PORTC2. MfG Spess
>data = PORTC & (1 << 2); PINC, PINC, PINC, PINC, PINC, PINC, PINC Nicht PORTC verdammt noch mal.
-
Thread
ATmega1284p - unerklärliche Phänomene
Lösungsansätze: Beispiel, die einen Reset auslösen: [c] int main(void) { DDRC = 0xFF; PORTC = 0xFF; while(1) { PORTC = 0xF0; _delay_ms(100); // <~ RESET PORTC = 0x0F; // wird nie erreicht _delay_ms(100); } return 0; } [/c] selbes Beispiel mit Watchdog
aus (allerdings ist die Lösung für mich nicht tragbar): [c] int main(void) { DDRC = 0xFF; PORTC = 0xFF; while(1) { PORTC = 0xF0; wdt_enable(WDTO_8S); _delay_ms(100); wdt_reset(); wdt_disable(); PORTC = 0x0F; wdt_enable(WDTO_8S); _delay_ms
-
Thread
BASCOM PORTC.2 not found
Ich habe hier in einem Programm was ich auf einen Atmega 32 übertragen möchte ein Problem mit dem PORTC.2. Der Portc.2 soll einen Alias bekommen über die Codezeilen: 'R6 r6 alias portc.2 config r6 = output Beim compilieren meldet Bascom dann den Fehler: .DEF not found PORTC.2 Ich gehe
Ja! OK! Danke! Das wars. Ich habe die Variablen R1...6 durch was anderes ersetzt. Jetzt geht es.
-
Thread
18B20 auf 7 Segmentanzeige
Zustand Hardware immer noch korrekt entwerfen kannst. So schwer ist ein [C] ISR( ... ) { PORTC = 0; digit=(digit+1)&7; PORTD=segmentabbild[ziffer[digit]]; PORTC=1<<digit; } [/C] dann auch wieder nicht. (Und da hab ich dann auch gleich noch das Ghosting eliminiert, das in deiner Lösung
man und Du auch zum Initialisieren braucht. Plus den Timer einstellen > ISR( ... ) > { > PORTC = 0; > digit=(digit+1)&7; > PORTD=segmentabbild[ziffer[digit]]; > PORTC=1<<digit; > } Main Tastatur abfrage ;hast du ja auch drin ;Und noch Tausend andre Sachen die der µC noch so
-
Thread
ITG3200 Probleme Bascom
$crystal = 16000000 $hwstack = 50 $swstack = 50 $framesize = 50 Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.5 , Db6 = Portc.6 , _ Db7 = Portd.7 , E = Portc.3 , Rs = Portc.4 Config Lcd = 16 * 4 Waitms 10 Initlcd Cls Waitms 50 Cursor Off Noblink $lib "i2c_twi.lbx" Config Scl = Portc
nicht sonderlich toll zu sein, 2000°/s braucht man auch niemals, falss es um ein modell oder roboter geht. gruß, norbert
-
Thread
ATMega 32 bleibt stehen
Schnapsidee? Ist ja fast so schlimm wie 230V über >1MOhm an Port.... Ganz "normaler" [[Pegelwandler]]. Geht schon, die 0,7mA verkaften die die Schutzdioden. MFG Falk
Hi! >Ganz "normaler" Pegelwandler. Geht schon, die 0,7mA verkaften die >die Schutzdioden. Und soetwas entlarft Pfuscher. MFG Uwe
-
Thread
8 Kanal Dimmer - Softwarefrage
Cursor Off Licht Alias Portd.7 Brunnen Alias Portd.6 Null_detect Alias Portd.2 Kanal1 Alias Portc.0 Kanal2 Alias Portc.1 Kanal3 Alias Portc.2 Kanal4 Alias Portc.3 Kanal5 Alias Portc.4 Kanal6 Alias Portc.5 Kanal7 Alias Portc.6 Kanal8 Alias Portc.7 Taste_dimmer_dunkler Alias Porta.0 Taste_dimmer_heller
Danke für deinen Tip. Habe deinen C Code so gut es geht analysiert. Habe aber trotzdem noch ein paar Fragen: - Während der ISR (INT1_vect) wird der INT1 selbst beendet, warum? - ist es korrekt, dass bei _jedem_ INT in der ISR (TIMER1_COMPA_vect, wo der
-
Thread
ATMega 16 Probleme mit PortC als Output
Das wär was für Andreas: Ein Automat, der bei jedem Posting, in dem die Begriffe PortC und Mega16 oder Mega32 vorkommen, mit "JTAG Fuse" antwortet. Ich glaub das würde sich lohnen.
Naja.. fast ;) http://www.mikrocontroller.net/forum/list-1-1.html?filter=portc
-
Thread
Tasterverriegelung und Tasterentprellung
an. [c] if(get_key_press(1<<KEY_2))// nur Taste press { // LED an PORTC &= ~(1<<PC1); } if(get_key_press(1<<KEY_3)) // nur Taste press { // LED aus PORTC |= (1<<PC1); } [/c] Verwende ich die Tasterentprellung von Peter, ist es
|=(1<<PA2); // EN ein PORTC &= ~(1<<PC5); // LED 5 an } } [/c] mfg.
-
Thread
Timer ungleichmässig
Hallo Karl Heinz habe die Klammern weggenommen. Geht immer noch nicht while(1) { if (signal_wait1 == 0xFF) { signal_wait1 = 0; if(PINC&(0<<PC5)) // Abfrage PortC PC5 LED 5 Grün leds_set_status
ist jetzt auf 1 und wird negiert. Geht aber trotzdem nicht. Wie ist es mit den Klammern. In meinem C-Buch stehen für jede if und else abfrage ein paar Klammern {} drin. Wieso werden diese hierbei nicht gebraucht.
-
Thread
SPI-Problematik (Daten Übertragung und andere Portc gestört)
setzen, dann SPI_MasterInit(), dann sei überhaupt Ausgabe von SPDR möglich */ // Ausgänge auf PORTC, für Diagnose oder andere Anwendungen denkbar DDRC = 0xff; PORTC = 0xff; while(1) { SPDR = 0xAF; /* so gehts einigermaßen, nur zum testen, auch mit Abfrage von while(!(SPSR & (1<<SPIF))); keine "Besserung" in Sicht. Im ersten Sinne nur Ausgabe nötig */ PORTC = 0xff; // Keine SPI Ausgabe mehr auf MOSI, nach PORTC Zugriff set_SS_X(3); // SS setzen SPI_MasterTransmit('B'); // Wird nicht an SPDR "gemeldet" unset_SS_X(3); } }
-
Thread
LED-Treiber Ansteuern Software
takt werden. da ich den toggle befehl nutze brauche ich nur ein delay [c] _delay_ms(200); PORTC.OUTTGL = 0x0C; /*Taste POL 1 mal gedrückt -> POL an 50%*/ [/] mir geht es ehr um die Grundidee kann man das mit einer for-schleife realisieren so wie ich mir das oben gedacht habe, sodass ich ein
/*PORTC.4 auf low UV-LEDs->aus*/ //PORTC.OUT &= ~ PIN3_bm; /*PORTC.3 auf high WW-LEDs->aus*/ //PORTC.OUT &= ~ PIN2_bm; /*PORTC.2 auf high KW-LEDs->aus*/ PORTC.OUT |= PIN3_bm; /*PORTC.3 auf high WW-LEDs
-
Thread
Disasembliertes Hex-File in C nachprogrammieren
nicht richtig verstehe. [c] cbi ADMUX, MUX0; 0000048C; Lösche Bit MUX0 im PortRegister ADMUX cbi PORTC, PORTC2; 0000048E; Lösche Bit PORTC2 im PortRegister PORTC cbi PORTC, PORTC5; 00000490; Lösche Bit PORTC5 im PortRegister PORTC lds r17, OnInterval; 00000492 10 91 rjmp Label_049C; 00000496
1 and r16, r16; 000004A0 00 23 brne Label_0498; 000004A2 D1 F7 sbi PORTC, PORTC5; 000004A4; Setze Bit PORTC5 im PortRegister PORTC [/c] Was passiert in den Zeilen 492 - 4A2 ? Das kann doch nur eine Zeitschleife sein ? Aber der Footprint eines _delays_us() sieht in
-
Thread
Wer findet den Fehler?
r17, 0x00 loop: sbic PINB, 0 rjmp plus sbic PIND, 0 rjmp minus out PORTC, r17 ende: rjmp loop plus: inc r17 warte1: out PORTC, r17 sbic PINb, 0 rjmp warte1 rjmp loop minus: dec r17 warte2: out PORTC, r17 sbic PIND,
nicht, da ich die Pins auf Masse ziehe passt schon SBIC. Das bedeutet, wenn ich den Taster drücke geht der Pin gegen 0V.
-
Thread
html in c array
=\"B\" %PORTC1>\r\n" "<span class=\"Stil2\">Port C Pin 1</span></p>\r\n" "<p><input type=\"checkbox\" name=\"OUT\" value=\"C\" %PORTC2>\r\n" "<span class=\"Stil2\">Port C Pin 2</span></p>\r\n" "<p><input type=\"checkbox\" name=\"OUT\" value=\"D\" %PORTC3>\r\n" "<span class=\"Stil2\">Port C Pin 3</span></p>\r\n" "<p><input type=\"checkbox\" name=\"OUT\" value=\"E\" %PORTC4>\r\n" "<span class=\"Stil2\">Port C Pin 4</span></
-
Thread
Problem mit AD7945BN DAC Ansteuerung
){ // PortC0 (MSB) bis PortC3, Rest PortA (PortA0 LSB) 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
)) PORTC |= (1<<0); PORTA = val; } [/c]
-
Thread
Zusammenfassen von 3 externen Interrupts?
Anwendung sinnvoll ist, geht das. Sofern du avr-gcc benutzt: http://www.nongnu.org/avr-libc/user-manual/group__avr__interrupts.html#gaa87c0c624b62f40a17539be6946c3e26 Oliver
all Interrupts while(1) { } } ISR(INT2_vect) // INT2 on PB5 { PORTC ^= 0x04; _delay_ms(500); EIFR |= (1<<INTF2); // Clear Int.-Flag } ISR(INT1_vect) // INT1 on PB2 { PORTC ^= 0x02; _delay_ms(500); EIFR
-
Thread
Hat schonmal einer ein Opel TID ->erfolgreich<-angesteuert ?
MRQ Low) Ist die Init Sequenz ganz am Anfang etwa nur für das Radio (eine leitung nach der anderen geht kurz auf Low) Gruß Dennis
&= ~(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
Anfängerfrage AVR GCC
LEDs sind auf dem STK500 mit dem PORTD über das Flachbandkabel verbunden. Genauso die Taster mit PORTC. Beides funktioniert auch einwandfrei, z.B. mit dem Entprellprogramm von Peter D. Solange ich den Taster gedrückt halte geht die LED aus. Wenn ich im falschen Moment drücke, bleibt sie an, aber
Danke! Denke so geht's: [c] for(;;) { // main loop if (TCNT1 == 0) OCR1A = 625; // 50 Hz while (!(PINC & (1 << PINC0))) { // Prüfen ob PC0 low
-
Thread
PIN vs PORT beim OUTPUT
| (1 << PC6) | (1 << PC7)); /* Ausgaenge */ void heater_ON() { if (!blockedOutputs) { PORTC |= (1 << PC7); } virtualTankUp = true; } void heater_OFF() { PORTC &= ~(1 << PC7); } bool heater_STATUS(){ return (PINC & (1 << PC7)); //return (PORTC & (1 << PC7)); }
> Im ohmschen Normalfall geht es hier wie erwartet nach anywhere Also bei mir (ein ATmega328P) geht es, wie erwartet, nach anywhereelse.
-
Thread
Uhrzeit stellen
int i=0 ; i<=10 ; i++){ cout << i;} i wird so lange gezählt, bis es den Wert 10 erreicht hat, dann geht die Schleife "zu".
// LEDs an PC0 auf Ausgang for(;;) { if( debounce( PINB, PB0 ) ) { PORTC ^= 1<<PC0; } if( debounce( PINB, PB1 ) ) { PORTC ^= 1<<PC1; } } } [/c] So funktioniert es jetzt. Beide LEDs schalten unabhängig voneinander. Taster drücken =
-
Thread
pwm-soft
Timer-Overflow (sinnvollerweise Interrupt verwenden) werden alle Pins auf High gesetzt und das ganze Spiel geht von vorne los.
compare<counter) { PORTC=0x10; } } PORTC=0x00; } } int main (void) { DDRC = 0xff; while(1) { fadein(); fadeout(); } return(0);
-
Thread
Port benennen
Wieso wurde das beim ATmega eigentlich so umständlich gelöst? Beim PIC geht das meiner Meinung nach viel intuitiver. PORTCbits.RC2=1; vs. PORTC|=(1<<PC2); PORTCbits.RC2=0; vs. PORTC&=~(1<<PC2); if(PORTCbits.RC2) vs. if(PINC&(1<<PINC2))
Pascal schrieb im Beitrag #3669535: > PORTC|=(1<<PC2); dann schreib PORTC|=_BV(PC2);
-
Thread
Lüftersteuerung mit C
PORTC |=_BV(PC1); _delay_ms(19); } //LED leuchtet etwa halbhell for(i=0;i<100;i++){ PORTC &= ~_BV(PC1); _delay_ms(5); PORTC |=_BV
i<100;i++){ > PORTC &= ~_BV(PC1); _delay_ms(19); > PORTC |=_BV(PC1); _delay_ms(1); > } > > } LED jeweils 19ms an, 1ms aus -> leuchtet hell. > > return 0; Das ist nur Formalität
-
Thread
Atmega Midi und Bascom
Onrxd Enable Urxc Enable Interrupts Dim Rxbyte As Byte Dim I As Integer I = 0 Led1 Alias Portc.5 Config Portc.5 = Output Led2 Alias Portc.4 Config Portc.4 = Output Led3 Alias Portc.3 Config Portc.3 = Output Led4 Alias Portc.2 Config Portc.2 = Output Led5 Alias Portc.1 Config Portc.1 = Output Led6 Alias Portc.0 Config Portc.0 = Output Cls Do Loop Onrxd: If I = 1 Then Rxbyte = Udr Led1 = Rxbyte.0 Led2 = Rxbyte.1