-
Thread
Atmega162 (MLF) timer interrupt will nicht, AVRstudio debugger mit mega16 funktioniert (AVR-GCC)
delay.h> #include <avr/interrupt.h> ISR(TIMER1_COMPA_vect) { //1 sec. timer cli(); PORTC = 1; sei(); } int main(void) { sei(); TIMSK = (1<<OCIE1A); //enable interrupts OCR1A=976; //1 sec. TCCR1B = (1<<CS12)|(1<<CS10)|(1<<WGM12); //CTC with prescaler 1024
obersten zeilen vergessen: Wenn kein Hardwarefehler vorliegt sollte es eigentlich funktionieren. Beim PortC solltest du aber beachten, das im Auslieferzustand des ATMega162 PC4..PC7 vom JTAG-Interface belegt sind. >DDRC=0b11111111; //sry für diese schreibweise veständlicher als >PORTC = 2; //zum
-
Thread
Immer gleicher Wert am ADC (ATMEGA8)
wert; ISR(ADC_vect) { wert = ADCL; wert += (ADCH<<8); if(wert < (uint16_t)500) PORTC |= (1<<PC5); else if(wert > (uint16_t)524) PORTC &= ~(1<<PC5); } void ADC_Init(void) { // interne Referenzspannung als Refernz für den ADC wählen: ADMUX = (1<<REFS0); ADCSRA
Dennis schrieb im Beitrag #3005422: > int main() > { > DDRC |= (1<<PC5); > PORTC &= ~(1<<PC5); > sei(); > ADC_Init(); > > } Wie schon erwähnt fehlt die Endlosschleife: [c] int main() { DDRC |= (1<<PC5); PORTC &= ~(1<<PC5); sei(); ADC_Init(); while
-
Thread
Intterrupts und Ports setzen
define INT1_vect _VECTOR(2) volatile uint8_t temp; ISR(INT0_vect) { PORTC = 0x01; } ISR(INT1_vect) { switch (temp) { case 0: PORTC = 0x01; temp++; break; case 1: PORTC = 0x02; temp++; break; case 3: PORTC = 0x03; temp
; // Globales Interrupt Enable Flag setzen DDRC = 0xff; // Port C als Output PORTC = 0x00; DDRD = 0x00; // Port D als Input MCUCR |= (1<<ISC01)|(1<<ISC00)|(1<<ISC10)|(1<<ISC11); GIMSK |=(1<<INT0)|(1<<INT1); while(1) { /* "leere" Schleife*/;
-
Thread
USART Mega8 funktioniert, ich verzweifele noch
USART_RX_BUFFER_SIZE]) { if (strncmp(temp, "DL", 2)==0) // Gültiges Zeichen { SETBIT(PORTC,PC0); if (temp[2] == (DIP + 48)) // Ja, richrtige Platine { //CLEARBIT (PORTC,PC0); set_chanel((temp[3]*10)+temp[4]); // Ja, Kanal aus String lesen set_supply
******************* // Byte empfangen SIGNAL (SIG_UART_RECV) { //if (PINC & (1 << PC0)) {PORTC &= ~(1 << PC0);} // LED an? Wenn ja, dan aus machen //else {PORTC |= (1 << PC0);} // Wenn nicht an, dann an machen unsigned char data; data = UDR; // Daten auslesen
-
Thread
Programmoptimierung
hilf = 200; if (hilf > 100 && hilf <= 200) { /* Frequenz ca. 391Hz */ PORTC |= (1 << PC6); _delay_ms(1.28); PORTC &= ~(1 << PC6); _delay_ms(1.28); } else if (hilf > 0 && hilf <= 100) { /* Frequenz ca. 132Hz */ PORTC |= (1 << PC6); _delay_ms(3.8); PORTC &= ~(1 << PC6); _delay_ms(3.8); } else hilf=500; hilf--; } [/C] Da mitten drinn ist die Hardwarebeschaltung versteckt. Aus dem Zusammenhang wird zwar irgendwann ersichtlich,
-
Thread
unverständliche Zeile in C-Code
erstmal danke, ich bekomme also eine 1, wenn ich an den vierten PIN von PORTc 5v anlege?
ich wage mal einen schuss ins blaue ^^ wenn an PORTC der pin PB0 1 ist wird 1 zurückgegeben wenn PB0 0 ist wird 0 zurückgegeben das xxx ? 1 : 0 ist glaube wie eine IF (xxxx) 1 ; else 0;
-
Thread
Kupferdrahtdurchmesser bei Spulen
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
DDRD, temp clr null ldi temp, 0xFF out PORTA, temp out PORTB, temp out PORTC, temp out PORTD, temp loop: rjmp loop [/C]
-
Thread
Spiegeln eines Bits
Das ist es Ich kann ja auch rechtsschiften.... man bin ich blöd... ich mach jetzt also nicht PORTC = (0x01<<i); sondern PORTC = (0x80>>i); ich danke euch :)
Ich sehe nicht so ganz, wie du mit "PORTC = (0x80>>i);" das spiegeln realisieren willst. Du kannst für i ja nicht direkt den Ausgangswert einsetzen. Du müsstest i erstmal ermitteln. Dann kannst du bei diesem "Ermitteln" auch gleich das Spiegeln
-
Thread
AtMega8 C-Array-Problem
lcd_puts("EING:-12,15,-20"); for(;;) if (j >0){ for(i=0;i<=2;i++){ ptab =&tab[i]; PORTC = PORTC | (1<<PC1); for(j=*(ptab);j>=0;j--) { { PORTC |= (1<<PC1); PORTC = PINC ^(1<<PC0); _delay_ms(1000); } itoa(j,buf,10); lcd_gotoxy(0,1); lcd_puts(buf); _delay_ms(1000); } } } else for(i=0;i<=2;i++){ ptab =&tab[i]; PORTC = PORTC & ~ (1<<PC1); for(j=*(ptab);j<=0;j++){ { PORTC = PINC ^(1<<PC0); _delay_ms(1000); } itoa(j,buf,10); lcd_gotoxy(0,1); lcd_puts(buf); _delay_ms(1000);
-
Thread
atmega32: Inputverhalten PORTB
main() { DDRB = 0x00; DDRC = 0xFF; while( 1 ) { if( PINB & ( 1 << PB0 ) ) PORTC |= ( 1 << PC5 ); if( PINB & ( 1 << PB1 ) ) PORTC &= ~( 1 << PC5 ); } } [/C] das wär mein Hardware-Testprogramm. Die LED muss mit PB0 ein und mit PB1 ausschaltbar sein. Geht
bestehen. Und auch nochmal: An PORTA funktioniert das Ganze. Deshalb kann es wohl auch nicht am PORTC liegen (z.B. JTAG).
-
Thread
JTAG lässt sich nicht deaktivieren (ATMega32)
16MHz Quarz. Geflasht wird mit ISP VCC = 5V Ich beobachte folgendes Problem: Ich möchte den PORTC vom ATMega32 als I/O verwenden. Alternativ liegt ja darüber das JTAG Interface. Im Code ist der PORTC als Ausgang deklariert, an diesem Port hängen jeweils 8 LEDs gegen Masse. D.h. JTAG Fuse Bit
dass JTAG auch deaktiviert ist) bleibt wohl JTAG aktiviert. Das sehe ich, indem z.B. die LED am PORTC PC0[SCL] ganz leicht glimmt. Mit dem Oszi messe ich dort auch einen Takt (~9,6KHz) mit einer Positiven Pulsbreite von ~440ns. Ich habe auch schon versucht JTAG parallel per SW abzuschalten ([c]
-
Thread
Problem mit SPI-Datenübertragung zwischen Master und Slave
die ISP-Schnittstelle verbunden und möchte vom Master Daten an den Slave senden und diese dort am PORTC ausgeben. CLK, SS und MOSI habe ich mit dem Oszi am Master gemessen. Hier ist alles OK! Mein Problem ist, dass ich die Übertragung am PORTC nur empfange, wenn ich das Programm Schritt für Schritt
und - willst Du nur jedes zweite Zeichen an PortC ausgeben? und - wofür wartest Du die 50 Mikrosekunden? _delay_us(50);
-
Thread
Ampelschaltung funktioniert nicht,
toggle ist ja umschalten. Kann ich mit diesem Befehl die Ports ein-und auschalten ? Config Portc.0 = Output Portc.0 = 1 Portc.0 = 0 Danke
-
Thread
Bedeutung der Warnung "suggest parentheses around assignment used as truth value [-Wparentheses]"
mode==HIGH){PORTB |= (1<<port_pin[1]);} if (mode=LOW){PORTB &= ~(1<<port_pin[1]);} break; case portc: if (mode==HIGH){PORTC |= (1<<port_pin[1]);} if (mode=LOW){PORTC &= ~(1<<port_pin[1]);} break; case portd: if (mode==HIGH){PORTD |= (1<<port_pin[1]);} if (mode=LOW){PORTD &= ~(1<<port_pin[1]);
parentheses around assignment used as truth value [-Wparentheses]" kleine Nebeninfo: porta bis portc sind absichtlich klein geschrieben, sie sind defines und sind einfach nur Integer Werte von 1-4. get_port_pin schreibt nur in das vorher initialisierte Array, in [0] schreibt es den Port (Wert von
-
Thread
ATMega16 und 4Servos
, warum mein Timer nicht geht?! warscheinlich ists ein Trivialikus den ich ueberseh. Die LEDs an PortC tun gar nix; eigentlich sollten eines 1s an, und danach 1s aus sein. Hier der Code: #include <avr/io.h> #include <inttypes.h> #include <avr/interrupt.h> #include <avr/signal.h> #ifndef F_CPU
SETBIT(TIMSK, OCIE1A); //other initialization stuff counter = 0; DDRC = 0XFF; PORTC = 0x00; sei(); timer16_load(32000); //load 32ms in den Timer for(;;) { if (counter>=31) //31*32ms = 992ms ~= 1s SETBIT(PORTC,PC3); else CLEARBIT(PORTC,PC2); if (counter
-
Thread
große Schrift bei GLCD mit T6963C
'3 +5V +5V '4 -9V Pin 6 Max 32 '5 WR PORTC.0 '6 RD PORTC.1 '7 CE PORTC.2 '8 C/D PORTC.3 '9 RESET PORTC.4 '10 '11-18 D0-D7 PORTA.0-7 '19 FS PORTC.5 '20 'rot +5V 'schwarz GND '******************************************************************************* $regfile = "m32def.dat" $crystal = 11059000
-
Thread
Umsteigen von Bascom auf C Gesperrt
------------------------------------------------------------------ Config Porta = Output Config Portc = Output Config Portd = Output Config Pinb.0 = Input Config Pinb.1 = Input Config Pinb.4 = Output Config Pinb.6 = Output Config Pinb.7 = Output Pinb.0 = 0 Pinb.1 = 0 '---------------------
Reset Porta.latch Offset = Offset + 1 Next Set Portc.ebene Waitms 1 Reset Portc.ebene Next Ebene Next Dauer Next Bild Loop End '----------------------------------------------------------------------
-
Thread
Selbsthaltung durch Variable
avr/io.h> Int Einschaltet=0; Int main (void){ DDRC &= ~(1<<PC0),~(1<<PC1),~(1<<PC2); // Eingang PORTC = 0x00; // Ohne pulldownwid… While(1){ if (PINC & (1<<PC0)==1){ // Bedingung = true führe die Schleife aus Eingeschaltet=1;} // Variable Eingeschaltet wird der Wert 1 gegeben if (Eingeschaltet
: [c] #include <avr/io.h> Int main (void){ DDRC &= ~(1<<PC0),~(1<<PC1),~(1<<PC2); // Eingang PORTC = 0x00; // Ohne pulldownwiderstände While(1){ if (PINC & (1<<PC0)==1){ // Bedingung = true führe die Schleife aus s++;} // Zählt eine Variable nach oben (+1 pro Durchgang der schleife) }
-
Thread
SRF01 Ultrasonic range finder
sending it high again { USARTC0.CTRLB = 0x00; // Disable USART reciever and transmitter PORTC.DIRSET=PIN3_bm; // PC3 (TXD0) as output. PORTC.DIRCLR=PIN2_bm; PORTC.PIN3CTRL = 0x0; // Send pin low startTimer(0x0500); // wait for about 1ms waitForTimer(); PORTC.PIN3CTRL=0x1; //send pin high USARTC0.CTRLB = 0x18; // Enable USART reciever and transmitter } ist da was falsch?? lg
-
Thread
mega8, twi & ansteuerung von PORTC?
Hallo! Wenn ich das TWI zur Verwendung initialisiert habe, kann ich dann auf dem verbleibenden PortC schalten und walten, wie ich möchte, oder muss ich da etwas berücksichtigen? Z.B. . . . DDRC = 0x0f; // 0=Out 1=Out 2=Out 3=Out 4=In 5=In 6=In 7=--- PORTC = 0x00; // 0=Low 1=Low 2=Low 3=Low 4=Low 5=Low 6=Low 7=--- . . . i2c_init(); . . PORTC = 0xff; . . PORTC = 0x02; . . PORTC = 0x03; Störe ich mit solchen Aktionen die TWI, oder werden meine Befehle dann für eben deren Portpins ignoriert? An PortC möchte ich einen MUX ansteuern
-
Thread
Mega16 PortC unter BASCOM AVR
Hallo Leute, mit folgendem Programm wolte ich den PortC des Mega16 testen: ------------------------------------------------------------ $crystal = 1000000 Config Porta = Output Config Portb = Output Config Portc = Output Config Portd = Output Porta = 0 Portb = 0 Portc = 0 Portd = 0 Start: Portc = 0 Wait 1 Portc = 255 Wait 1 Goto Start End ------------------------------------------------------------ Folgende Pins PC0, PC1, PC6 und PC7 wechseln
-
Thread
Timer1 Overflow interrupt löst nicht aus (AtMega32)
/interrupt.h> #include <avr/signal.h> #include <util/delay.h> ISR (TIMER1_OVF_vect) { PORTC ^= 1 << PC4; } ISR (__vector_default) { PORTC &= ~(1 << PC0); } void delay_ms(uint16_t delay) { uint16_t i; for (i = 0; i < delay; i++) { _delay_ms(1); } } void delay_sec
) { delay_ms(1000); } } int main (void) { DDRC = 0xFF; // Port Ausgang PORTC = 0xFF; // Port Pullups PORTC &= ~(1 << 7); delay_sec(2); PORTC ^= 1 << PC7; // timer stuff TCCR1B |= (1<<CS12)|(1<<CS10); // TCCR1B |= (1<<CTC1)|(1<<CS12)|
-
Thread
Sram schreiben
zu Fuß programmieren um genau zu verstehen wie es funktioniert. Zu meiner Schaltung: Habe an PortC eines ATMega32 ein 74LS573 Latch Habe A0 bis A7 vom 62256 an die Ausgänge angeschloßen. A8 bis A14 sind ebenfalls an PortC angeschloßen. LE und OE sind an PD0 und PD1 Die Datenleitungen des 62256
einen LOW - Teil(A0-A7) und einen High - Teil(A8-A14) aufgeteilt. Zuerst gebe ich den Low - Teil an PortC aus und schalte LE vom Latch einmal an und dann wieder aus.Danach lege ch den High - Teil auf den Port. So jetzt liegt die komplette Adresse an meinem 62256 an. An PortB gebe ich nun die Daten aus
-
Thread
PIC 18F2550 und PS2 Tastaur
du auch nur annähernd getestet haben könntest. Und ob der das mag weiß ich nicht: CLRF PORTC ; alle Pins von PORTC -> Ausg�nge CLRF TRISC ; PORTC komplett l�schen #DEFINE ps2_data PORTA,1 ; PS/2 Datenleitung #DEFINE ps2_clock PORTA,0 ; PS/2 Clockleitung
-
Thread
Softuart um midi zu senden
{ PORTD=byte; byte>>=1; bitcount++; tick=0; } } PORTC.1^=1; } // Timer 1 overflow interrupt service routine interrupt [TIM1_OVF] void timer1_ovf_isr(void) { // Reinitialize Timer 1 value TCNT1H=0x70; TCNT1L=0x00; // Place your code here PORTC.2^=1; toggle++; } /* // Timer 2 overflow interrupt service routine interrupt [TIM2_OVF] void timer2_ovf_isr(void) { // Place your code here PORTD.2^=1; } */
-
Thread
ATMega16 und PWM
und was ist das: ISR(TIMER1_COMPA_vect) { // PORTC ^= (1<<PC7); PORTC ^= (1<<PC7); } ? na ich den timer im normalen modus betreibe, zählt er doch von bottmom bis top. wenn er de den wert von ocr1a erreicht, dann ruft er den interrupt auf. aber
Karlheinz Druschel schrieb im Beitrag #2276957: > und was ist das: > ISR(TIMER1_COMPA_vect) > { > // PORTC ^= (1<<PC7); > PORTC ^= (1<<PC7); > } Das ist weder eine ISR für OCIE1B, noch für TOIE1. Wenn du einen der beiden Interrupts freischaltest, ohne eine ISR dafür zu haben, gibt es einen Software-Reset
-
Thread
negative Berechnung der Temperatur
Richtungsregister Port C auf Ausgang PORTB = 0xFF; // Port B = High (7-Segm. Anzeige OFF) PORTC = 0xFF; // Port C = High (Transistoren sperren) //**** Init ADC **** ADCSRA |= 1<<ADEN; // ADC aktivieren ADCSRA |= (1<<ADPS1)|(1<<ADPS2); // Vorteiler auf 64 ADMUX
PORTC = segmenttable [einer]; // Ausgabe der EINER auf 1. Anzeige _delay_ms(5); PORTB = T2; // Anzeige 2 aktivieren PORTC = segmenttable [zehner]; // Ausgabe
-
Thread
ADC-Wandlungs-Ergebnis als Bitfolge an einem Port ausgeben
meinung auf dem gesamten port auch dasselbe ausgangssignal anliegen oder? die restlichen pins von portc sind übrigens auf 0V. es ist aber auch immer noch ein und der selbe µc. habe es noch nicht geschafft einen neuen zu besorgen. mfg andre
einfach im main-programm. aber kein resultat... alle pins bleiben tot bis auf die beiden pins von portc, was sehr verwunderlich ist. anbei ist nochmals das programm, nicht das ich da was falsch interpretiert habe. bei der simulation im avr zeigt er mir das auch schön an. nur mein microcontroller macht
-
Thread
Frage zu meiner Schaltung
nicht und das 574 nicht. Schreiben sieht also so aus (Grundzustand PD6=1 PD7=0 DDRC=output): PORTC=A0..A7 PD7=1 PD7=0 nun ist das untere Adressbyte in IC2. PORTC=A8..A12,OE=1,WE=0 PD7=1 PD7=0 nun ist das untere Adressbyte in IC3 und das obere mitsamt OE/WE in IC2. PORTC=Daten PD6
-
Thread
Lauflicht (hin und her) 14 LEDs Problem in asm
; if yes, the current LED needs to be on out PORTA, STORE2 ; else the next one out PORTC, STORE2 rjmp LOOP ; and start over THIS_LED: cp OUTER, INNER out PORTA, STORE ; switch on current LED out PORTC, STORE rjmp LOOP ; and start over
rjmp LOOP ; ansonsten springe zu loop Storesetzen: sbi PORTA, PB7 sbi PORTC, PB7 ldi STORE1, 128 LSR STORE1 rjmp test2 test2: out PORTA, STORE1 out PORTC, STORE1 inc ZAEHLER2 rjmp test3 test3: LSR STORE1 CPI ZAEHLER2
-
Thread
Bascom Programm
ist an diesem Programm falsch ? $regfile = "m8def.dat" $crystal = 1000000 Ddrd = &B11111111 Portc = &B00011111 Do If Pinc.0 = 0 Then Portd = 1 Waitms 100 Portd = 3 Waitms 100 Portd = 7 Waitms 100 Portd = 15 Waitms 100 Portd = 31 Waitms 100 Portd = 63 Waitms 100 Portd = 127
If Pinc.0 = 0 Then stimmt schon, mit Portc.0 würde er nur das Ausgaberegister auslesen, in diesem Fall den Status der Pullups.
-
Thread
Volt-Celsius umrechnen mit Bascom Gesperrt
ein Problem, zwar habe ich einen LM335 per Spannungsteiler (Festwiederstand ist 2.2kOhm) mit dem Portc.2 (ADC2) Pin eines Atmega48 verbunden. Später soll die Temperatur über ein bereits angeschlossenes LCD display in °C ausgegeben werden. Jedoch habe ich keinen Plan, wie ich diese Volt Zahl in °C
ein Problem, zwar habe ich einen LM335 per Spannungsteiler >(Festwiederstand ist 2.2kOhm) mit dem Portc.2 (ADC2) Pin eines Atmega48 >verbunden. Später soll die Temperatur über ein bereits angeschlossenes >LCD display in °C ausgegeben werden. Festwiderstand heißt das. Typisches Bascom User Problem
-
Thread
Zugriff auf einzelne Bits in einem Register
#define _XS(x,y) x |= 1<<y #define LED_I2C PORTD,5 #define LED_ERR PORTC,3 // Code: if( Error ) RESET( LED_ERR ); else SET( LED_ERR ); [/C] Die Verschachtelung ist nötig, damit die Aufteilung in 2 Argumente keinen Fehler erzeugt (wird nur bei der
#define _XS(x,y) x |= 1<<y wird es angewendet, so ergibt sich PORTC |= 1 << 3
-
Thread
hd44780 mit ATXmega / Ansprechen einzelner Pins
Datenbus DB4-DB7, das unterste Bit DB4 kann auf den Portbits 0..4 liegen // LCD DB4-DB7 <--> PORTC Bit PC0-PC3 #define LCD_DB PIN0 // LCD Steuersignale RS und EN // LCD RS <--> PORTC Bit PC4 (RS: 0=Data, 1=Command) #define LCD_RS PIN4 // LCD EN <--> PORTC Bit PC5 (EN: 1-Impuls für Daten) #define LCD_EN PIN5 #endif // LCD_PORTS [/c] Und so weiter...
-
Thread
bitverknüpfungen
Bits logisch _verknüpfen_ geht nicht. _Einzelne_ Bits setzen/löschen hingegen funktioniert so: sbi(PORTC,1) setzt z.B. das 1. Bit im PORTC-Register. cbi(PORTC,1) andi r16,0xF0 out r16,PORTC Das "andi" verknüpft den Inhalt des Registers R16 logisch mit der Konstanten 0xF0 (löscht also die unteren
-
Thread
Gerade Parität berechnen
=0)||(bitcount==2)||(bitcount==4)||(bitcount==6)||(bitcount==8)){ cbi(UCSR0B,TXB8); sbi(PORTC,PC0);//switch LED off }else{ sbi(UCSR0B,TXB8); cbi(PORTC,PC0); //switch LED on } Findet jemand den Fehler? Ich sehe ihn nämlich leider nicht! Tobi
geht ein wenig kürzer: if (!(bitcount & 1)) /* bitcount gerade? */ cbi(UCSR0B,TXB8); sbi(PORTC,PC0);//switch LED off }else{ sbi(UCSR0B,TXB8); cbi(PORTC,PC0); //switch LED on } mfg werner
-
Thread
BASECOM Simulator funktioniert nicht!?
: $crystal = 8000000 $regfile = "m8def.dat" Config Lcd = 16 * 2 Config Lcdpin = Pin , Db7 = Portc.5 , Db6 = Portc.4 , Db5 = Portc.3 , Db4 = Portc.2 , E = Portc.1, Rs= Portc.0 Cls Do Lcd "Hello World" Waitms 500 Cls Waitms 200 Loop Nun compiliere ich den Code ohne Probleme und starte den
-
Thread
AVR-GCC "C" Port als Variablenwert ablegen und nutzen - ich komm einfach nicht drauf
; if mein_Port == "PORTB" then PORTB = 0b00001111 ; if mein_Port == "PORTC" then PORTC = 0b00001111 ; ... (Ich hoffe mein avr-gcc "C"-Pseudocode ist verständlich.) Danke & Gruß
Frank_G wrote: > <passender typ> mein_Port = "PORTC" ; <== ???? volatile uint8_t * mein_Port = &PORTC; > mein_Port = 0b00001111; <== ???? *mein_Port = 0b00001111;
-
Thread
I2C für Anfänger
' we do not use software emulated I2C but the TWI Config Scl = Portc.5 Config Sda = Portc.4 Config Twi = 100000 ' wanted I2C clock frequency Twcr = &H80 ' TWEN Dim B
chip $crystal = 7372800 ' frequency used Config Scl = Portc.5 Config Sda = Portc.4 Config Portb.1 = Output ' kopletter PortD als Ausgang Config Portb.1 = 0 Dim Twi_status As Byte Dim Twi_data As Byte Declare
-
Thread
LED's Blinken anstatt zu leuchten
Leider leuchten die LED's nicht sondern sie blinken nur. Ich habe mir mal einen einzigen Pink an PORTC am Oszilloskop angesehn. Es sieht aus wie ein Rechtecksignal. Ich verwende einen ATmega162. [c] int main( void ) { DDRC = 0xFF; while ( 1 ) { PORTC = 0x00; } return 0;
ob es besser geht wenn du die Sache so schreibst: [c] int main( void ) { DDRC = 0xFF; PORTC = 0x00; while (1); } [/c] Und noch eine Frage was passiert wenn der Controler das return = 0; erreicht? Startet er dann neu also quasi Reset oder macht er dann einfach garnix mehr?
-
Thread
Timer-Problem Atmega16 und Code::Blocks
0b00001111; //WIRD NIE AUSGEFÜHRT TCNT0 = 141; PORTA = 0b00000000; //RESET ROWS A PORTC = 0b00000000; //RESET ROWS B PORTC = 1 << column; //SET COLUMN column for(i = 0; i < 7; i++) { if(frame[(column*7)+i] <= step) { PORTA = 1 << i; //SET ROW i IN A } if(frame[(column*7)+i+49] <= step) { PORTC = 1 << i; //SET ROW i IN B } } column++; if(column > 6) { column = 0; step++; if(step > 50) step = 0; } } [/c]
-
Thread
Maximalfrequenz an PINs ATMEGA8
interrupt [TIM0_OVF] void timer0_ovf_isr(void){ TCNT0=0xFF; PORTC.0=~PORTC.0; } //Timer0 initialization TCCR0=0x03; TCNT0=0xFF;
include <iom8v.h> #include <macros.h> void port_init(void) { PORTB = 0x00; DDRB = 0x00; PORTC = 0x00; //m103 output only DDRC = 0x00; PORTD = 0x00; DDRD = 0x00; } //TIMER1 initialize - prescale:1 // WGM: 0) Normal, TOP=0xFFFF // desired value: 500KHz // actual value: 500,000KHz
-
Thread
Delay in Interrupt - routine
{ _delay_loop_2(10000); // 10ms Delay int_flag = bit_is_set(PIND,3); PORTC = int_flag; s++; } while ( (int_flag >= 1) && (s <= 200) ); if (s >= 200) { PORTC = 0xAA; } else { press++; address = press * 1000; if (press >= 15) press = 0; PORTC = ~press; TIMSK = (0<<TOIE0); } GIFR = (1<<INTF0); }
-
Thread
AVR-C-Compiler !?!
Eingang DDRC = 0xFF; //PortC als Ausgang DDRB = 0x01; PORTD = 0xFF; //Pullup PORTC = 0x00; PORTB = 0x06; } int main (void) { ini(); while(1) { PORTC |= (1 << PC1); _delay_ms(200); PORTC &= ~(1 << PC1); _delay_ms(200); } return 0; } die delays sind aber
-
Thread
wie nutze ich die entprellroutine von Christian Riggenbach??
(1 << PC5); // Set LED as Output at PC5 DDRB |= (0 << PB1); // Set Switch PD2 as Input PORTC |= (1 << PC5); // Turn LED off PORTB |= (1 << PB1); // activate Pullup for Switch at PD2 for(;;) { if(entprellung( &PIND, (1<<PD2) )) { PORTC ^= (1 << PC5); //toggle LED at PC5
hinhauen. for(;;) { entprellung(&PIND, (1<<PD2) ); if (!(PIND & 1<<PD2)) { PORTC ^= (1 << PC5); //toggle LED at PC5 } } der Taster wird dann praktisch die ganze Zeit entprellt richtig? Gruß R.
-
Thread
Probleme bei einfachem Bascom Programm
hwstack = 32 $crystal = 8000000 '8Mhz Quarz Config Portc = Output 'display Config Porta = Input 'Schalter Config Portd.5 = Output 'PWM 1 Config
'Pins des LCD-Modules setzen ggf. an eigene Anschlüsse anpassen Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.5 , Rs = Portc.4 Config Lcd = 20 * 4a , Chipset = Ks077 Initlcd Cls 'Namen und Variablen 'Schalter auf Entwicklungsboard
-
Thread
Input/Print zwischen 2 µcs
hwstack = 32 $crystal = 16000000 $baud = 9600 Config Lcd = 16 * 2 Config Lcdpin = Pin , Rs = Portc.0 , E = Portc.1 , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 Cls Dim Test As Byte Do Test = Inkey() Locate 1 , 1 Lcd Test Loop End Wie schaffe ich es mir die
-
Thread
AVR IO Configuration
define VERT_H_END PC6 // Output #define VERT_DIRECTION PC3 #define VERT_MOVE_DOWN PORTC |= (1<<VERT_DIRECTION) #define VERT_MOVE_UP PORTC &= ~(1<<VERT_DIRECTION) #define VERT_STOP PC2 #define VERT_BRAKE_OFF PORTC &= ~(1<<VERT_STOP) #define VERT_BRAKE_ON PORTC
pullup resistors PORTA |= ((1<<SLID_ENC_1) | (1<<SLID_ENC_2) | (1<<SLID_REF) | (1<<GRIP)); PORTC |= ((1<<SDA) | (1<<SCL)); } [/c] man muß dann halt nur aufpassen, daß man Input und Output nicht verwechselt (daher in der hardwaredef.h danach sortiert) und die Portzuordnung stimmt. Man könnte
-
Thread
AVR Reaktionszeit I/O
HIGH ); PORTB &= ~(1<<3); //digitalWrite ( ledrot, LOW ); //digitalWrite (ledgelb, LOW ); PORTC |= (1<<4); //digitalWrite ( Ausgang_1, HIGH ); PORTC |= (1<<2); //digitalWrite ( Ausgang_2, HIGH ); PORTG |= (1<<2); //digitalWrite ( Ausgang_4, HIGH ); PORTL |= (1<<6); //digitalWrite
PORTB &= ~(1<<2); //digitalWrite ( ledgruen, LOW ); //digitalWrite ( ledgelb, LOW ); PORTC &= ~(1<<4); //digitalWrite ( Ausgang_1, LOW ); PORTC &= ~(1<<2); //digitalWrite ( Ausgang_2, LOW ); PORTG &= ~(1<<2); //digitalWrite ( Ausgang_4, LOW ); PORTL &= ~(1<<6); //digitalWrite
-
Thread
ATmega 1284P PA4 geht nicht
); // PA3 and PA4 as output while (1) { PORTC |= (1 << PC7); // set PC7 high PORTA |= (1 << PA3) | (1 << PA4); // set PA3 and PA4 high for (counter1=0;counter1<255;counter1++){for(counter2=0;counter2<255;counter2++){}} // waiting PORTC &= ~(1 << PC7); // set PC7 low PORTA &= ~((1 << PA3) | (1 << PA4)); // set PA3 and PA4 low for (counter1=0;counter1<255;counter1++){for(counter2=0;counter2<255;counter2++)