-
Thread
Interrupt-kritische Bereiche
Interrupts gesichert werden. Die Eigenschaft 'atomar' ist in C alles andere als trivial zu bestimmen. PORTC=0 ist z.B. atomar. (ein Befehl in ASM). PORTC = PORTC+1 nicht (Laden in R, inkrementieren, speichern). PORTC |= 1 dagen schon (sbi PORTC,1). Konstukte, die auf Konditionen auf globalen Variablen bauen
für C ist vorhanden, der für C++ nicht. Womit also die entsprechende C++ Feature schon mal nicht geht. Und exception handling benötigt eben libstdc++.
-
Thread
avr asm: interrupt int0 löst bei fallender flanke nicht aus
am µC auf Masse ziehe, dann sollte nach meinem Wissen der INT0-INTERRUPT ausgeführt werden. Die an portC angeschlossene LED bleibt jedoch aus. Was mache ich falsch? Gruß ckrex
0x0000 rjmp reset .org 0x0002 rjmp Int0_Handler .org 0x0004 rjmp Int1_Handler denn gehts auch schau mal ins Datenblatt rjmp ist -2kbyte zurück und +2kbyte vorwärts jmp ist bis 4Mbyte Sprungweite
-
Thread
Zeitproblem UART Daten speichern und mit Timerinterrupt ausgeben.
ISR (TIMER1_COMPA_vect) { /* Interrupt Aktion alle (16000000Hz)/ 362 = 44100 Hz */ PORTC_temp = fifo_get_nowait(&infifo); if (PORTC_temp != -1) { PORTC = PORTC_temp; } }[/c] Wenn ein Byte in der Warteschlange ist (also fifo_get_nowait(&infifo)!=-1) wird der Wert an PORTC ausgegeben, an dem ein DAC hängt. Das Problem ist, dass am Ausgang des DAC nur etwa mit 300 Hz Daten herauskommen. Ich vermute mal, dass sich die Interrupts gegenseitig behindern... Aber im Moment
-
Thread
MUX Ansteuerung mit AVR
Nene mit AVR geht das schon, aber sezt doch mal z.B. A = 1 B = 0 C = 1 in der SOftware ohne zu wechseln, dann guckst du ob die Pegel stimmen am MUX und ob der richtige Kanal an ist. JTAG ist ne DEBUG Interface an PORTC des AVRs wodurch wenn es aktviert ist nicht der ganze PortC verwendet werden kann als IO
-
Thread
Serielle Übertragung
was nicht heißt, dass es keines > gibt). Mit fehlt jedoch der ganze Code, z.B. um zu prüfen, dass PORTC > nirgendwo anders auftaucht, Hallo, nein PortC wird nur dort verwendet. > das Register „received“ bzw. ein Alias davon > nirgendwo anders verwendet wird .def temp = R16 .def received
from USART OUT PORTC, received POP temp ;Restore Status-Register OUT SREG, temp POP temp ;Retore temporary Variable RETI SerOut: LDI Temp, 31 SBIS UCSRA,UDRE RJMP
-
Thread
16bit Bus mit AVR
benutzen. Wie sprich ich aber den Port an? Kann ich einfach einen 16Bit Wert auf den Port legen, z.B. PORTC=55FF ? Grüße Thomas
kleines define genausogut: [c] #define BUS(x) (PORTA=(unsigned char)((x)>>8); PORTC=(unsigned char)(x) : BUS(0x55ff); : [/c]
-
Thread
Drehzahl über ICP
Das versuche ich gerade mit: [c] //LED einschalten PORTC |= (1<<PC0); PORTB |= (1<<PB4); _delay_ms(2000); PORTB &= ~(1<<PB4); PORTC &= ~(1<<PC0); [/c] Die LED geht zwar an aber nichtmehr aus. Btw ich benutze myAVR Workpad
weil der Watchdogtimer ständig aktiv war. Über die Sofware die Fuses umgestellt und siehe da es geht :)
-
Thread
Problem mit Eingang abfragen :(
den Eingang auf D7 gelegt und es funktioniert. Guck mal, welchen AVR Du hast, manche haben auf PORTC das JTAG. Peter
Danke für deine schnelle Hilfe. Habe mein Programm entsprechend deinen Vorschlägen geändert. Jetzt geht es endlich.
-
Thread
8Bit Timer Atmega16/Overflow Interrupt
TIMSK |= (1<<TOIE0); // Global Interrupts aktivieren sei(); //init LCD RS_0; PORTC = 0b00111000; E(); wait(); PORTC = 0b00001100; E(); wait(); PORTC = 0b00000001; E(); wait(); while (1) { if (TCNT0 == 0xff) { zaehler++; } if (zaehler
erlauben TIMSK |= (1<<TOIE0); //Global Interrupts aktivieren sei(); //init LCD RS_0; PORTC = 0b00111000; E(); wait(); PORTC = 0b00001100; E(); wait(); PORTC = 0b00000001; E(); wait(); while (1) { //Licht if (PINA&(1<<PINA5)) { DDRA |=
-
Thread
Kupferdrahtdurchmesser bei Spulen
So wie die in dvdlaufwerken wo kugeln drin sind 8) Jetzt brauch ich nur noch die Platine und dann gehts los :)
knightrider_demo_nosync_pa223171.avi Wer hat sich das eigentlich ausgedacht dass der mega8 unterhalb der portc0..5 den adc6, adc7 hat ? grrr Hab das als portc6/7 gelesen -> Drahtbrücken und noch mehr shifterei
-
Thread
Lauflicht mit 2 Atmega8
geht doch mit 2 Atmegas, sogar synchron! Der Master-Atmega gibt seine Anweisungen einfach über die serielle Schnittstelle an seinen Slave. B.
Bernadette schrieb im Beitrag #1751665: > geht doch mit 2 Atmegas, sogar synchron! > > Der Master-Atmega gibt seine Anweisungen einfach über die serielle > Schnittstelle an seinen Slave. Natürlich gehts. Man kann auch eine WLAN Verbindung
-
Thread
LED Matrix Betrieb?
kriminellerweise 16-fach gemultiplext, da werden sich noch 2 74HC138 verbergen. > nach dem 8. LOAD geht es bei der ersten Reihe weiter Es geht also erst nach der 16. Reihe wieder mit der ersten weiter.
= "m32def.dat" $crystal = 8000000 $hwstack = 150 $swstack = 200 $framesize = 200 Config Portc = Output 191_load Alias Portc.5 164_data Alias Portc.6 164_clk Alias Portc.7 Dim Datenbyte As Byte Dim Zeile As Byte Dim A As Byte Dim B As Byte Config Timer0 = Timer , Prescale = 64
-
Thread
NAND mit TAmega32 ansteuern
Das mit dem 74HC573 verstehe ich nicht richtig. Ups, der Mega32 hat kein Memory-Interface. Das geht nur mit z.B. ATmega162, ATmega128. Peter
noch einen Pull-down und WP einen Pull-up spendieren. In Deiner NAND.c setzt/löschst Du mit jedem PORTC-Zugriff immer nur genau einen Pin, die anderen werden dabei LOW - das ist sicher nicht Deine Absicht. (siehe Hans Peter B.) PORTC = (0<<x) Was soll das? Schiebe mal eine Null hin und her, was erhältst
-
Thread
TFT LCD Ansteuerung
= 1; LCD_RD = 1; PORTC = 0x00; //DBhigh Output eeprom_write(0x00, Datalo); eeprom_write(0x01, Datahi); [/c] Jedoch bleiben die Wert im EEPROM auf 0xFF. Ich habe versucht das Auslesen nach dem Diagramm auf Seite
Hallo, PORTC = 0xFF; //DBhigh Input .. schaltet den Datenport gewiss nicht auf Input wenn du DBhigh = 0x00 zur Ausgabe verwendest, dann kann Datahi = DBhigh nicht zum Einlesen verwendet werden, da Ausgabe ja
-
Thread
Wie kann ich in AVR-Assembler ein Feld erzeugen?
können/sollten... Aber wie mache ich das? Hier in den Tutorials wird das immer mit ".db" gemacht, geht das anders aus? Z-Zeiger vielleicht? Aber wie? Vielen Dank!
out DDRD, temp ldi temp, 0b00000001 ;Digit0 aktivieren out PORTD, temp ldi temp, 0xFF ;PORTC ist Ausgang für Daten out DDRC, temp loop: lpm temp,Z+ ;Daten ausgeben und Z-Zeiger erhöhen out PORTC, temp rjmp loop ;Tabelle: ;======== Data: .byte 0b10101011
-
Thread
Wartezeiten effektiv (Scheduler)
Bene Jan schrieb im Beitrag #2161658: > void test(void) > { > DDRC = 0b00000111; > PORTC = 0b00000000; > } ääähm... wierum genau hast du denn deine leds angeschlossen..? könnte dein problem vielleicht einfach nur sein, das du portC auf 0x00 stehen lässt...?
Ich hab jetzt nochmal volatile benutzt und auf einmal geht es! Ich bin mir 100%-sicher das ich es eben genauso gemacht habe und da hat es nicht funktioniert...
-
Thread
Helligkeit LED Multiplexing
Also: Segment1 an PortA1 Segment2 an PortA3 .. dann änder ich dir den Code so, dass er geht..
/-- nächste Spalte coloumn++; coloumn &= 0x03; //-- Ausgabe aktuelle Spalte PORTC = dig[coloumn]; PORTA = tab[coloumn]; } [/c] Das geht, falls der Timer-Interrupt in gleichmäßigen Abständen auftritt. (Man nimmt dafür aber eher den Overflow als den Compare-Int) PS
-
Thread
Uhr geht bischen lahm; Codevision; timer vorladen
dass man so mir nichts, dir nichts eine Uhr bauen kann die in einem Jahr nur um 2 Sekunden falsch geht, nur weil da ein Quarz dranhängt, ist ein Trugschluss.
das gleicht den Zeitverlust wieder aus. So kannst Du auch ohne Trimmer die Uhr abgleichen. Das geht noch genauer, wenn Du den Zähler länger zählen läßt, also z.B. 5 ms (ca. 40000 -> 0x63C0)
-
Thread
Pins am Port in einem Durchgang modifizieren
Max K. schrieb: > [c]PORTC |= 0b00011110 & ~(1<<PORTC);[/c] Dir ist klar, daß es 0bXXXXXX in der C-Syntax nicht gibt? Servus Michael
drum kümmern, umständlich irgendwas zurück zu lesen. > (was läuft eigentlich > beim ATMega8 auf PORTC5-7?) PC5 wäre SCL des I²C-Interfaces, PC6 ist eine Alternativfunktion von /RESET (du müsstest dann aber die /RESET-Funktion explizit per Fuse abschalten; danach geht kein ISP mehr!), PC7 existiert
-
Thread
LEDs des STK-500 leuchten nicht, obwohl User Guide gelesen!
folgenden 6-Zeiler in den AVR geflashed: include "m16def.inc" reset: SBI DDRC,0 main: SBI PortC jmp main Pin 0 soll als Ausgang geschaltet werden und in einen High Zustand versetzt werden. Nach dem Flashen habe ich eine LED an PortC Pin0 gegen 0V angeschlossen. Die LED wurde auf Funktion
ldi r17, 0xAA out DDRA, r16 out PORTA, r17 out DDRB, r16 out PORTB, r17 out DDRC, r16 out PORTC, r17 out DDRD, r16 out PORTD, r17 rjmp PC Es sollte jede 2. LED leuchten, egal welcher Port. Peter
-
Thread
Nokia 3310 Lcd Ansteuerung in AVR-GCC
Hallo Andi, danke für die schnelle Antwort. Ich habe jetzt PB4 auf PB2 geändert und jetzt geht es einwandfrei. Gruß Harald
#define sbi(port,bit) \ (port) |= (1 << (bit)) [/c] in der drm3310.h hinzufügen? Geht das?
-
Thread
Timer 0 mi ATmega8
habt eine Idee! Liebe Grüße, Jan [c]ISR (TIMER0_OVF_vect){ //timer0 overflow vector PORTC |= (1<<PC1); } int main(void){ DDRC |= (1 << DDC1); //Set direction register for pc1 PORTC = 0x00; //set outputs initially to zero //Timer initialization TIMSK = (1<<TOIE0); //
/io access #include <avr/interrupt.h> ISR (TIMER0_OVF_vect){ //timer0 overflow vector PORTC |= (1<<PC1); } int main(void){ DDRC |= (1 << DDC1); //Set direction register for pc1 PORTC = 0x00; //set outputs initially to zero //Timer initialization TIMSK = (1<<TOIE0); //
-
Thread
Anfängerprobleme beim Programmieren eines Lauflichts mit funktionen
i){ if(i==1){ PORTC |= (1<<PC2); } else if(i==2){ PORTC &= ~(1<<PC2); } } void port3(int i){ if(i==1){ PORTC |= (1<<PC3); } else if(i==2){ PORTC &= ~(1<<PC3); } } void dauerlicht(){ PORTC |= (1<<PC0); PORTC |= (1<<PC1); PORTC |= (1<<PC2); PORTC |= (1<<PC3); return; } void blinklicht(){ int a=1; int b=2; port2(a); port0(b); _delay_ms(300); port3(
-
Thread
f*** mega8 ->I²C
Anschlussschema kann man zu solchen Problemen fast gar nichts sagen (ausser vielleicht bei Megaxx, LCD an PortC funktioniert nicht :-)
.equ i2c_port = PORTC .equ i2c_pin = PINC .equ i2c_ddr = DDRD //???
-
Thread
GCC ignoriert Zuweisung in struct
befindet sich jetzt folgende Schleife: while (1) { if (bit_is_clear(PINC,0)) { sbi(PORTC,2); servo1.high = 46; servo1.low = 224; } else { cbi(PORTC,2); servo1.high = 31; servo1.low = 64; } } Mit dieser Schleife kann ich bei drücken auf den
SBI 0x15,2 Entspricht sbi(PORTC,2); RJMP PC-0x0003 CBI 0x15,2 Entspricht cbi(PORTC,2); RJMP PC-0x0005 d.h. gcc ignoriert einfach meine Zuweisung. Jetzt bin ich etwas ratlos. Ich hoffe, es
-
Thread
Port Definitionen
PINA #define BIT_ADC_0 0 [/c] sind #defines, die bei der Nutzung von PORTC als Standard-IO sinnvoll sind. Nutzt du dagegen den ADC, helfen die dir nicht weiter. Ist der ADC aktiviert, dann wird der ADC-Kanal in den unteren Bits des ADMUX-Registers eingestellt. Insofern
Wenn in meinem Programm aber zB. der PORTB 100mal auftaucht und mir fällt ein, dass ich doch den PORTC nehmen will, dann muss ich alles ändern und nicht nur ein "define"! verstehst du was ich meine? Wie macht man sowas??? Bei einer Zahl ist das kein Problem. #define PI 3,141 Aber wie mache
-
Thread
Hum. Roboterhand Part II: codeeffektive kontinuierliche Servoansteuerung
eine position vorgebe, fährt der servo ja mit maximaler geschwindigkeit an seine position - wie (geht das?) kann ich die geschwindigkeit verringern? Beste Grüße Alex
( ++ServoId >= SERVO_ANZAHL ) ServoId = 0; if( ServoId == 0 ) { PORTF = 0x01; PORTC = 0x00; } else if( ServoId < 6 ) PORTF <<= 1; else if( ServoId == 6 ) { PORTF = 0x00; PORTC = 0x01; } else PORTC <<= 1; OCR2 = 57 + value[ServoId];
-
Thread
Atmega 48 - und alles ist anders.
q = ~q; while(1){ DDRB = 0xff; PORTB = 0xff; _delay_ms(time); DDRC = 0xff; PORTC = 0xff; _delay_ms(time); DDRD = 0xff; PORTD = 0xff; _delay_ms(time); DDRB = 0xff; PORTB = 0x00; _delay_ms(time); DDRC = 0xff; PORTC = 0x00; _delay_ms(time); DDRD =
0x00; _delay_ms(time); DDRB = 0xff; PORTB = p; _delay_ms(time); DDRC = 0xff; PORTC = p; _delay_ms(time); DDRD = 0xff; PORTD = p; _delay_ms(time); DDRB = 0xff; PORTB = q; _delay_ms(time); DDRC = 0xff; PORTC = q; _delay_ms(time); DDRD = 0xff; PORTD
-
Thread
etwas akademische Frage zu C
Fußnote doch eher drauf an, was *nachher* drinstand und nicht vorher?!? Also: PORTA = PORTB = PORTC = 0xFF; wurde vor der Draft-Änderung interpretiert als: PORTC = 0xFF; PORTB = PORTC; PORTA = PORTB; Also: Was jeweils genommen wurde, war der Wert *nach* der vorhergehenden Zuweisung
Klar geht das: [c] for(uint8_t i=0;; i++) { // ... if(i==255) break; } [/c]
-
Thread
Mikrocontroller
mappen, damit ist dein I/O Zugriff schneller. Hier ein Codeschnipsel, sollte selbsterkärend sein. //PORTC wird als Virtueller Port definiert PORTCFG.VPCTRLA |= PORTCFG_VP02MAP_PORTC_gc; //Der Virtuelle Port0 wird als Ausgang definiert VPORT0.DIR = PIN0_bm; Dann z.B. mit VPORT0.OUT = 0x00; den PortC auf 0 setzen, einzelne Bits geht natürlich auch. Ein Bit-Zugriff mittels VPORT ist wirklich eine SBI oder CBI Anweisung, wenn du einen normalen Port Zugriff verwendest, sind es drei einzelne Befehle. Grüße, Kai
-
Thread
wieder mal MAX7219 (Problem mit Programm oder Schaltung?)
Daten senden while(1){ PORTC = 0xAA; // LEDs blinken im wechsel _delay_ms(500); PORTC = 0x55; _delay_ms(500); }; return 0; } [/c]
Digit 1 auf Zahl 1 SPI_Transmit(0x02,0x02); // Digit 2 auf Zahl 2 while(1){ PORTC = 0xAA; // LEDs blinken im wechsel _delay_ms(500); PORTC = 0x55; _delay_ms(500); }; return 0; } [/c]
-
Thread
ATMega88PA ADC6 als Ausgang geht nicht
Hallo Zusammen, ich habe ein ATMega88PA in eine Schaltung eingelötet. Ich hatte vorher ein ATMega8 und dieser hat beim ADC6 5V geschallten. Bei Stand-By wurde danach der Pin abgeschalten. Das lief so weit gut. Jetzt habe ich ein ATMega88PA eingelötet und der ADC tut nicht. Habe mal alle Pins (7-2) als Ausgang und als High geschalten. DDRC = 0b11111100; PORTC = 0b11111100; ADC 2-5 = 5V ADC 6+7 = 0V Wieso das? Funkt hier noch etwas rein? Im Datenblatt habe ich alles nach ADC6 abgeklappert aber keinen Hinweis gefunden. Wo könnte der Fehler liegen? Gruss Alain
-
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
Lampe blinken lassen für eine Steuerung in Bascom (ATMega8)
Ahnung. Hier der Code in Bascom: [pre]$regfile = "m8def.dat" $crystal = 8000000 Config Portc.1 = Input Config Portc.2 = Input Config Portc.3 = Input Config Portc.4 = Input Config Portc.5 = Input Config Portd.0 = Output Config Portd.1 = Output Config Portd.2 = Output Config Portd.3 = Output Set Portc.1 Set Portc.2 Set Portc.3 Set Portc.4 Set Portc.5 Config Debounce = 30 Const An = 1 Const Aus = 0 Einschalten Alias Pinc.1 Ausschalten Alias Pinc.2 Rauchmelder Alias Pinc.3 Notaus
-
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
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
Problem mit Entprellung?
PortB als Ausgang deklarieren PORTB = 0x00; // PortsB auf LOW schalten DDRC = 0x00; // PortC als Eingang deklarieren PORTC = 0b00000111 ; /* Pullup-Widerstand aktivieren */ } Dummerweise habe ich dabei 2 Probleme. Bei der Simmulation (AVRStudio) bekommt mein Rechner sich nicht
geht auch in C: [C] MCUCSR |= (1<<JTD); MCUCSR |= (1<<JTD); [/C]
-
Thread
Frage zu AVR-C
für: > [c] > PORTB = PORTB & (1<<1); > [/c] > > Genauso verhält es sich mit dem "Oder" Es geht ja darum einen Ausgang anzusteuern. Das kann man doch auch so machen. PORTC = (1<<1); wozu noch ein &, bzw |....
O. A. schrieb im Beitrag #5031960: > Es geht ja darum einen Ausgang anzusteuern. > Das kann man doch auch so machen. > > PORTC = (1<<1); > > wozu noch ein &, bzw |.... Nun so ein 8Bit Port hat 8 unterschiedliche Zustände, das sind die
-
Thread
mega8 Port "C" tot
Bitte was? ;-) Ich kann damit leider nur begrenzt was anfangen....gehts nen bisschen genauer?!
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 ?
-
Thread
AVR Atmega 16 Inputs reagieren nicht
Also im Simulator funktioniert das Programm: Config Portc = Input Config Portd = Output '--------------------------------- 'Hauptprogramm: '--------------------------------- Do If Portc.0 = 1 Then Set Portd.0 If Portc.1 = 1 Then Reset
die Digitaltreiber gekillt habe,könnte ich sie auch nicht mehr als Outputs benutzten oder, aber das geht ja....
-
Thread
Atmega Ports "durchzählen"
) { DDRA = 0xff; //PORTA als Ausgang DDRC = 0xff; //PORTC als Ausgang PORTA = 0xff; //Alle LEDs aus PORTB = 0xff; //Alle LEDs aus while (1) { PORTA = 0x01; PORTC = 0x01; long_delay
for (j=0; j<5; j++) { for (i=0; i<4; i++) { z <<= 1; PORTC = z; long_delay(300); } PORTC = 0x01; s <<= 1; PORTA = s; long_delay(300); z = 1; } } return 0; } [/
-
Thread
timer/counter 1+pwm auf pin ausgeben
Der Wert "1024" liegt außerhalb des Bereiches der 10-Bit-PWM! Die geht nur bis 1023 (0x3FF)...
0 << CS11)|(1 << CS10); Fahrt_vorwaerts(); ////hier die funktion /////// #define MRR PORTC &= 0x7F; #define MRV PORTC |= 0x80; #define MLR PORTC &= 0xBF; #define MLV PORTC |= 0x40; void Fahrt_vorwaerts(void) { MLV; MRR; } so aber weiterhin besteht das problem
-
Thread
genaues Timing mit ATMEGA8 unter C
Programmiert: #include <avr/io.h> #include <util/delay.h> int main(void) {int i,j,x,y; PORTC = 0b00000000; PORTD = 0b00000000; DDRC = 0xff; DDRD = 0xff; for (;;) {x = 32; for (i=0; i<6; i++) {PORTC = x; x = x/2; y = 32; for (j=0; j<6; j++)
int main(void) { DDRC = 0xff; DDRD = 0xff; for (;;) { for (PORTC=32; PORTC>0; PORTC >>= 1) for (PORTD=32; PORTD>0; PORTD >>= 1) _delay_us(25); } } funzen, aber das sollte man testen.
-
Thread
Matrix-Tastatur an AtMega8
abziehen for(i=0; i<j; i++){ //LED Blinkschleife _delay_ms(50); PORTC= PORTC | (1<<PORTC0);//Ausgang C0 auf HIGH _delay_ms(50); PORTC= PORTC & ~(1<<PORTC0);//Ausgang C0 auf LOW# } } } [/c]
dann müsstest Du die Fächer wohl absolut auswerten - spätestens nach dem Aus- und wieder Einschalten geht sonst die Rechnerei los. Gruss
-
Thread
Registernamen/Variablennamen erstellen
Ist Dir klar was [c] #define PORTC _SFR_IO8(0x15) [/c] bedeutet?
Beschäftige dich mal mit dem C-Präprozessor. Der kennt nämlich so einen Token-Paste-Operator, damit geht z.B.: [c] #define IN(p) PIN##p IN(A) /* wird zu PINA */ [/c]
-
Thread
ICP mit ATmega88 und Multiplexer
(" "); } while(!(PINC&(1 << PC3))); } if (kanal == 1) { PORTC &= ~((1<<PC0) | (1<<PC1) | (1<<PC2)); // Alle Adressleitungen auf 0 } else if(kanal == 2) { PORTC |= (1<<PC0); PORTC &= ~((1<<PC1) | (1<<PC2)); // A auf 1 B
Kanal wählen if (kanal == 4) { kanal = 1; } if (kanal == 1) { PORTC &= ~((1<<PC0) | (1<<PC1) | (1<<PC2)); // Alle Adressleitungen auf 0 } else if(kanal == 2) { PORTC |= (1<<PC0); PORTC &= ~((1<<PC1) | (1<<PC2)); // A auf 1 B
-
Thread
AVR Ports und Pins Verständnisfrage
nimmt man die DDx0-7, PINx0-7 bzw. Px0-7 z.B. DDRD |= (1<<DDD0) | (1<<DDD0)....; //PD0 oder PIND0 geht natürlich auch
Beschaltung (mit, ohne Quarz, AD-Wandler usw.) wäre eine andre Anordnung optimal. Das so zu machen geht aber einfach nicht.
-
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
ADC und Timer funktionieren nicht zusammen in Bascom
Werte passen exakt und springen nicht. @Paul: Kannst du mir vielleicht kurz erklären, wie das geht im Bascom, von der ISR raus, kurz ins Hauptprogramm, und dann wieder zurück? Oder einen Befehl? Auch in Bascom bin ich leider nicht der Bringer ;o( Danke Gregor
Config Lcd = 16 * 2 Waitms 100 Cursor Off Config Portd = Output Config Portb = Output Config Portc.4 = Output Led1 Alias Portc.4 Config Portc.5 = Output Led2 Alias Portc.5 Config Timer1 = Timer , Prescale = 8 Enable
-
Thread
EtherSex mit Pollin Net-IO - Portsteuerung und Abfrage über HTTP funzt nicht ?
Hier habe ich mal was damit gemacht. Parallel dazu habe ich noch die NamedPins benutzt, da geht das sofort. Die Checkboxen im IOControl reagierten bei mir auch ziemlich spät.
Mitmachen - ? Gern, wenn ich kapiert habe, wie es geht ...! Habe halt das Henne - Ei Problem. Grüße