-
Thread
Probleme mit LCD TC1602A
die Zeichen, die ausgegeben werden sollen erscheinen auch nicht. Das Display wird im 8 Bit modus an PORTC betrieben. PORTC->Data PA0->RS PA1->RWT PA2->EN Ich verwende folgendes Datenblatt http://www.winstar.com.tw/UserFiles/downloads/13511323500823064564.pdf Init auf Seite 11 Source Code
(1<<PA2); } void vLCDPutCommand(uint8_t _ui8Command){ PORTA &= ~((1<<PA1) || (1<<PA0)); PORTC = _ui8Command; vLCDEnable(); } void vLCDPutChar(char _cZeichen){ PORTA &= ~(1<<PA1); PORTA |= (1<<PA0); PORTC = _cZeichen; vLCDEnable(); } [/c] Grüße Hubba
-
Thread
Global typedef struct mit signed char?
AxisRelPos += AXIS[AxisSelect].AxisDirection; if (AXIS[AxisSelect].AxisRelPos < 0) PORTC = 0; else PORTC = 255; }[/c] Wird mit signed / unsigned int deklariert, so wird AxisRelPos richtig als vorzeichenbehafteter Integer betrachtet. Wird dagegen int16_t
im Beispielcode an der unterschiedlichen Ausführung des Branches. Mit "signed int AxisRelPos" wird PORTC = 0, mit "int16_t AxisRelPos" wird PORTC = 255 ausgeführt. Das darf so nicht sein. Würd' vorschlagen, das sich das jemand Anders noch anschaut, nicht dass ich was übersehen hab'. Kann auch sein
-
Thread
mehrere Pins vom Mega32 einlesen und Frage zu Ponyprog
der Nenene. Ich glaube du irrst. Wenn ich das richtig verstehe, dann hast du beispielsweise an PORTC und PORTD jeweils 8 Sensoren dran. Die müssen per One-Wire angesteuert werden. Um nun die Portadresse sowie die Bitnummer variabel zu gestalten, musst du - beim lesen anstatt IN den Befehl LD
mit variablem Z-Pointer arbeiten. -dito anstatt OUT eben ST Also ldi ZH,0 ldi ZL,PORTC+0x20 Jetzt kann man die Subroutine aufrufen, PORTC kann nun mit ld r16,Z st Z,r16 gelesen und geschrieben werden. Um die Bitnummer variabel zu gestalten nimmt man einfach ein Byte
-
Thread
Pin setzen / rücksetzen
folgendermaßen setzen: led = 4; //z.B. 1 für die 1. LED oder 4 für die 3. LED outp(~led, PORTC); Korrekt?! Wofür kann ich aber dann die folgenden Funktionen nutzen? sbi(PORTC, PINC3); //setzt Pin eines Ports?? cbi(PORTC, PINC3); //cleart den Pin eines Ports??? Und wie muss
(PORTC, PINC2);" um die dritte LED einzuschalten >Und wie muss ich einen Port konfigurieren für folgende Befehle? >bit_is_set(PORTC, PINC2); >bit_is_clear(PORTC, PINC2); Die Konfiguration ist egal
-
Thread
Helligkeit LED Multiplexing
uint8_t b0, b1, b2=60, b3=1; // digits anzeigen 8 stueck for(b0=1; b0<9; b0++) { PORTC = dig[b0]; PORTA &= ~(1<<(b0-1)); // an for(b1=0; b1<b2; b1++) { asm volatile("nop"); } PORTA |= (1<<(b0-1)); // aus } SREG=tmp_sreg; }
/-- nächste Spalte coloumn++; coloumn &= 0x03; //-- Ausgabe aktuelle Spalte PORTC = segment [ dig[coloumn] ]; PORTA = tab[coloumn]; } [/c]
-
Thread
AD Wandler nutzen
Taster angeschlossen, die ungedrückt 5V anliegen lassen und gedrückt 0V. Und diesen COde: PortD = PortC
Das Einlesen funktioniert mit PINC, nicht PORTC! Beliebter Fehler.
-
Thread
I2C Atmega328p als Master und 24LC256 EEPROM IC als slave
while (!(TWCR &(1<<TWINT))); //wait for TWINT flag SET } int main (void) { DDRC=0xff; PORTC=0x30; //Enable internal pullups on PORTC PINS SDA(PC4) , SCL(PC5) DDRD=0xFF; //Port D as output set_clock(100); //setting clock 100KHz send_start(); if(check_start_status
while (!(TWCR &(1<<TWINT))); //wait for TWINT flag SET } int main (void) { DDRC=0xff; PORTC=0x30; //Enable internal pullups on PORTC PINS SDA(PC4) , SCL(PC5) DDRD=0xFF; //Port D as output set_clock(100); //setting clock 100KHz send_start(); if(check_start_status
-
Thread
ATXMEGA Timer Interrupt ISR Problem
Wie PORTC erlaubt zugriff? Ich habe den oben im meinem Code als Ausgang gesetzt nur um die Laufzeit der ISR Routine zu überprüfen. Theoretisch mir der Einstellung und dem 32MHz Oszi sollte der Zyklus 64 us (
Wo genau in deinem code setzt du portc?
-
Thread
Mega168 Modul Seriell ansprechen
) wird nicht ausgeführt. (PORTC wird nicht aktiviert und die lampe blinkt nach senden eines Bytes unabhängig von gloFrequ = ...; immer gleich schnell. Kommentiere ich die ISR-Funktion komplett aus, dann bleibt der Controller ganz
> der code in ISR(USART_RX_vect) wird nicht ausgeführt. Vermutlich doch. > (PORTC wird nicht aktiviert Was soll denn da aktiviert werden? Du setzt den Port doch schon in /main/ auf 0xFF, wie soll denn das "PORTC = 0xFF;" in der ISR noch irgendetwas sichtbares bewirken? > und
-
Thread
Lauflicht mit 2 Atmega8
i = 0; i < sizeof( Values ) / sizeof( *Values ); ++i ) { PORTB = Values[i].valueB; PORTC = Values[i].valueC; PORTD = Values[i].valueD; _delay_ms( 20 ); } } } [/C] jetzt musst du nur noch genügend Einträge in der richtigen Reihenfolge im Array machen, damit
); ++i ) { PORTB = Values[i].valueB | (1<<7); // Daten fuer B und Sync-Port setzen PORTC = Values[i].valueC; PORTD = Values[i].valueD; _delay_ms( 20 ); // Impuls auf 20ms verlängern PORTB &= ~(1<<7); // Sync-Port zuruecksetzen _delay_ms( 20 ); //
-
Thread
Analog Devices: DDS IC (AD9959) mit ATMega64L ansteuern SPI
ftemp << 32; ftemp /= 402800000; SPCR = (1<<SPE) | (1<<MSTR) | (1<<SPR1); PORTC &= ~(1<<AD9959_nCS); /* AD9959 selektieren */ send_spi( 0x00 ); /* Register 0 (CSR) zum Schreiben */ send_spi( 0xE2 ); /* CH1,2,3 selektieren, Single-bit 3-Wire, MSB first */ send_spi( 0x04
ftemp>>8) & 0xFF ) ); /* Bit15..8 */ send_spi( (uint8_t) ( ftemp & 0xFF ) ); /* Bit7..0 */ PORTC |= (1<<AD9959_nCS); /* Übertragung beendet */ PORTC |= (1<<AD9959_IOUPDATE); /* Werte übernehmen */ for( dummy=0; dummy<10; dummy++ ); PORTC &= ~(1<<AD9959_IOUPDATE); } send_spi macht
-
Thread
switch Case läuft nicht im AVR Simulator
nop; Arr[i](i); } } } void F_0 (char x0) { nop; x0++; x0 = x0>>2; PORTC = x0; } void F_1 (char x1) { nop; x1 += 5; PORTC = x1; } void F_2 (char x2) { nop; x2++; x2 += x2 | 0b00001111; PORTC = x2; } void F_3 (char x3) { nop; x3++; x3 &= 0xF0; PORTC = x3; }
-
Thread
LED leuchten lassen
; _delay_ms(500); PORTC ^= (1<<PC1); _delay_ms(500); //GElb aus PORTD |= (1<<PD7); //alle Ampeln sind aus PORTC |= (1<<PC4); PORTC |= (1<<PC1); PORTB ^= (1<<PB0); _delay_ms(500); //Fußgänger 1 Rot Ein PORTD ^= (1<<PD6); //Fußgänger 2 Rot Ein _delay_ms(500); PORTC ^= (1<<PC5); //Auto 1 Rot Ein _delay_ms(500); PORTC ^= (1<<PC2); //Auto 2 Rot Ein _delay_ms(500); PORTC ^= (1<<PC4); //Auto A1 und A3 kommt gelb dazu _delay_ms(500); PORTD |
-
Thread
Pin Ausgang Spannungsfehler
= (1<<PA5); //Grün, LED 5 PORTA = (1<<PA6); //Grün, LED 6 PORTA = (1<<PA7); //Grün, LED 7 PORTC = (1<<PC1); //Grün, LED 1 PORTC = (1<<PC2); //Grün, LED 2 PORTC = (1<<PC3); //Grün, LED 3 PORTC = (1<<PC4); //Grün, LED 4 PORTC = (1<<PC5); //Grün, LED 5 PORTC = (1<<PC6); //Grün, LED 6 PORTC
Je nachdem welcher Controller benutzt wird, liegt Jtag evtll. auf PORTC(Mega32 usw)... Das muss dann per Fuse abgeschaltet werden, falls nicht gebraucht. Gruß, Daniel
-
Thread
Atmega PortA komische Pegel
>Und trotzdem liefert er mir an allen Pins von PortC 4V. > DDRA = 0xff; > PORTA = 0x00; Was denn nun PortA oder PortC? Wenn du PortA auf Ausgang setzt floatet PortC. Entscheide dich mal;)
Ist es möglich das sich PortA und PortC gegenseitig stören? Ich habe versucht mal beide auf 0xff mal beide 0x00 und mal den einen 0x00 und den anderen 0xff zu setzen und wenn ich sofort nach einschalten gemessen habe kam mist raus hab ich
-
Thread
Komisches Verhalten von leds/taster
alle LEDS eingeschalten werden sollen, allerdings leuchteten die LEDs 6 und 7 nicht. (Habe PORTB und PORTC benutzt). Als ich dann anschließend PortD benutzt habe, ging es wieder. Heißt das, dass ich jetzt nur noch PortD benutzen kann? Das kann es ja nicht sein oder? Danach habe ich noch ein kleines Testprogramm
an portb.6 und port.b7 wird der quarz angehängt, hast du deinen uC auf externen takt laufen? portc.6 ist der reset-pin, musst also auf fuse setzen um den verwenden zu können
-
Thread
Funktionen, Interups und Variablen
i = 0; Ueberlauf = 0; while (i<Schrittzahl) { if (Ueberlauf >= Takt) { PORTC |= (1<<Servo_Takt); Ueberlauf = 0; i += 1; } else { PORTC &= ~(1<<Servo_Takt); } Ueberlauf += 1; } } wenn ich denn Ueberlauf allerdings über
i = 0; Ueberlauf = 0; while (i<Schrittzahl) { if (Ueberlauf >= Takt) { PORTC |= (1<<Servo_Takt); Ueberlauf = 0; i += 1; } else { PORTC &= ~(1<<Servo_Takt); } } } der Timer Overflor funktioniert auf jeden Fall, dass habe ich
-
Thread
ATMEGA88 UART seltsames Verhalten
DDRC = 0xFF; // Port C komplett Ausgang Uart0Init(); //UART initialisieren PORTC=0x00; while(1) { data=UDR0; //Wertzuweisung PORTC=~PORTC; //toggle _delay_us(data); //warte } // end while(1) } //end main
2 Problemkreise [C] while(1) { data=UDR0; //Wertzuweisung PORTC=~PORTC; //toggle _delay_us(data); //warte } // end while(1) [/C] [C] data=UDR0; //Wertzuweisung [/C] du kannst nicht einfach
-
Thread
Anfänger PIC16F1518 läuft nicht
;die Startadresse nach Reset ist 0, hier startet der PIC goto main init BANKSEL PORTC ; CLRF PORTC ;Init PORTA BANKSEL LATC ;Data Latch CLRF LATC ; BANKSEL ANSELC ; CLRF ANSELC ;digital I/O BANKSEL TRISC ; MOVLW B'00000000' MOVWF TRISC
### ;##### Main ######################## main goto init mainloop BANKSEL PORTC bsf PORTC,0 ;RC5 bsf PORTC,1 ;RC6 bsf PORTC,2 ;RC5 bsf PORTC,3 ;RC5 bsf PORTC,4 ;RC5 bsf PORTC,5 ;RC5 bsf PORTC,6 ;RC5 bsf PORTC
-
Thread
Frage zu Fuses beim Atmega16
den rfm12 modulen eine 8 kanal fernsteuerung zu machen. ich habe PortD als eingang der taster und PortC als Ausgang, hab da einfach Leds dran. Jetzt verhält sich der PortC aber an machen Pins nicht so, wie er soll. Hab gehört das das auch mit den Fuse Bits zusammenhängen kann. Sind die so richtig eingestellt
folgenden code und der soll, soweit er das auch beim Atmega8 gemacht hat, die PortD als Eingang und PortC als Ausgang benutzen, also am Sender drückt man PortD und beim Empfänger wird dann eben PortC ausgegeben. Bei PD0 und PD1 is alles ok aber dann gehts los PD2 da blinkt die Led an PC2 nur kurz und mit
-
Thread
AN2131 USB CONTROLLER
* PortB Ausgaben */ #define OEB 0x7F9D; /* Datenrichtung PortB */ #define OUTC 0x7F98; /* PortC Ausgaben */ #define OEC 0x7F9E; /* Datenrichtung PortC */ volatile unsigned char xdata *c_Adr_Ptr;/* allg. Adr-Zeiger */ volatile unsigned char xdata *c_PortA_Ptr;/* PortA-Zeiger */ volatile
demnach an- und ausschalten. Mein Code sieht demnach folgendermassen aus: #define OUTC 0x7F98; /* PortC Ausgaben */ #define OEC 0x7F9E; /* Datenrichtung PortC */ void main () { volatile unsigned char xdata *c_PortC_Ptr;/* PortC-Zeiger */ /* Port C auf Ausgang setzen */ c_PortC_Ptr = OEC;
-
Thread
bascom_frage
As Integer Dim B As Single Dim C As Single Dim D As Integer Dim Rechnen As Integer Config Portc.3 = Output Roteled Alias Portc.3 Config Portb.0 = Output Rotled1 Alias Portb.0 Config Portb.1 = Output Rotled2 Alias Portb.1 Config Portb.2 = Output Rotled3 Alias Portb.2 Config Portb.3 =
Bisschen planlos... Du hast Pinc.0 als Eingang definiert und auch den Pullup mit Portc.0=1 eingeschltet. Der Taster muß nun zwischen Pinc.0 und Masse und Du mußt auf "0" auswerten, denn der Pin wird dann bei Tastendruck auf GND d.h 0 gezogen. Das eigentliche Programm ist mir zu
-
Thread
serielle Daten über einen Pin einlesen
nochmal an Alle! Und zwar bin ich auf folgendes Problem gestoßen. Ich bekomme an einem Eingang (PORTC, PIN=0) serielle Daten. Diese möchte ich nun bitweise einlesen und abspeichern. Meine Idee sieht so aus: for (BitCounter=0;BitCounter<80;BitCounter++) { Speicher[ChipIdBitCounter] = inp
irgendwas haben, was an PINC den Empfang des nächsten Bits triggert. Das kann z. B. sowas sein wie: PORTC |= (1 << yourtriggerbit); PORTC &= ~(1 << yourtriggerbit); um einen kurzen Impuls des yourtriggerbit-sten Bits in PORTC auszulösen. Die Schreibweise ist so ganz und gar gängig (bspw. in den
-
Thread
Hex- bzw C-File in asm
NOMCLR #use delay (clock=4000000) // 4MHz clock #rom 0x3ff={0x3444} #byte PORTA = 0x05 #byte PORTC = 0x07 #byte TRISA = 0x85 #byte TRISC = 0x87 #define SPORTA PORTA #define SPORTC PORTC #define TICKS_BETWEEN_INTERRUPTS 5000 //5000 #define INTERRUPT_OVERHEAD 35 #define
---------- void Display() { PORTA = 0b00100111; // off all digits column and Segment G PORTC = 0b00111111; // off segment a-f delay_cycles(2); if (ColCount>=3) ColCount=0; SPORTC = Segment[ColCount]; SPORTA = ((Segment[ColCount] & 0b01000000)>>1) | (Column
-
Thread
Relais schaltet aus statt ein
vom Temp. - sensor ///t_soll/ kommt von PIND if((t_ist <= t_soll + 1)) //&& !(PORTC & (1<<RELAIS_C))) { //Heizung //an //(Relais HIGH) PORTC |= (1<<RELAIS_C); } else if((t_ist >= t_soll - 1))// && (PORTC & (1<<RELAIS_C))) { //Heizung////aus //(Relais LOW)// PORTC &= ~ (1<<RELAIS_C); } // ein wenig warten verhindert, // dass der Sensor durch Selbsterw?rmung // falsche Ergebnisse liefert
-
Thread
myAVR mk2 mit nur einem Taster bedienen - assembler
PORTB,r18 in r19,PINC sbrs r19,5 rjmp Taster rjmp mainloop Taster: sbi PORTC,5 Taster1: ldi r18,0b01011011 out PORTB,r18 in r20,PINC sbrs r20,5 rjmp Auswahl rjmp Taster1 Auswahl: ldi r18,0b00111111 ... Das problem ist derzeit
ldi r16,0x00 ldi r17,0xFF out DDRB,r17 out DDRD,r17 out DDRC,r16 out PORTC,r17 mainloop: ldi r18,0b00000110 out PORTB,r18 in r19,PINC sbrs r19,5 rjmp Taster rjmp mainloop Taster: cbi PORTC,5 Taster1: ldi r18,0b01011011
-
Thread
Problem mit DS1307
----- I²C Einsatellungen ---------- Config Twi = 100000 'i2c Frequenz einstellen Config Sda = Portc.4 'i2c Port SDA am AVR Config Scl = Portc.5 'i2c Port SCL am AVR '---------- LCD Einstellungen ---------- Config
' modified lib 'configure the scl and sda pins Config Sda = Portc.4 Config Scl = Portc.5 Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.5 , Rs = Portd.4 Config Lcd = 16 * 2 Config Lcdbus = 4
-
Thread
AVR im eimer?
falsch" eingestellt sind? Oder wie passiert sowas? Ich nehme nicht an dass es so ist, dass man bei PORTC standardmässig nicht alle pins auf high schalten kann...
Takt wieder beleben können und konnte die einstellungen nun vornehmen. Nun klappt es auch mit PORTC besten dank für eure hilfe :)
-
Thread
atmega adc im assembler
ADPS2) | (1<<ADPS1) | (1<<ADPS0) out ADCSRA, temp1 [/avrasm] Hier wird der Kanal 0 also PORTC0 ausgewählt vom ADC und die interne Referenzspannung wird gewählt. Ich google die ganze Zeit und kämpf mich durch die Tutorials durch aber ich finde einfach nicht raus, mit welchem Befehl ich den Port1
[avrasm] .include "m8def.inc" ;Spannung1 auf PortC0 .def tempspg1 = r16 ;Spannung2 auf PORTC1 .def tempspg2 = r17 ;Spannung3 auf PORTC3 .def tempspg3 = r18 .def temp2 = r19 .def temp3 = r20 .def temp4 = r21 .def adlow = r22 .def adhigh = r23 .def temp5 = r24 .def temp6 =
-
Thread
ADC bei Atmega 32
COMM_ANODE_M) { switch(number) { case 0: //wobei PORT1 = a usw. PORTC=~(0b00111111); break; case 1: PORTC=~(0b00000110); break; case 2: PORTC=~(0b01011011); break; USW... [/c] Die Siebensegmentanzeigen
Siebensegmentanzeige zeigt 0 an. Die zweite - (also den default-Wert bei der switch-case Anweisung) Die dritte : PortC gibt bei Pin 4 einen Wechselspannung mit dem RMS-Wert von 0,6V aus. Der Rest ist wie bei der ersten Siebensegmentanzeige. Nur zur Info: Die angelegte Wechselspannung beträgt ungefähr 2,9V. Liefert
-
Thread
timer problem atmega8
OVF_vect) { timer++; if(state==1) { if(timer<<insp) { PORTC |= (1<<0); } if((timer<<exsp) && (timer>=insp)) { PORTC &= ~(1<<0); } if(timer==exsp) { act++; timer=0; if(act==max)
OVF_vect) { timer++; if(state==1) { if(timer<<insp) { PORTC |= (1<<0); } if((timer<<exsp) && (timer>=insp)) { PORTC &= ~(1<<0); } if(timer==exsp) { act++; timer=0; if(act==max)
-
Thread
Code übersetzen
Kalman_filter_auswertung(gyro As Single , Adxl As Single , Dt As Single) As Single Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.1 , Rs = Portc.0 Config Lcd = 16 * 2 Cls Config Adc = Single , Prescaler = 128 , Reference = Off Start Adc 'Init Call Init_gyro1dkalman
-
Thread
PIC16F87x läuft nicht richtig
benutze. Problem: Ich hab am PIC einen 4511 (BCD zu 7 Segment Decoder) hängen, und zwar an PORTC Bit 0 - 3, außerdem hängt an PORTC,4 und PORTC,5 je ein NPN Transistor, der für das multiplexen der Anzeige zuständig ist. Wenn ich jetzt probehalber (ohne PIC) einen BCD Wert auf den 4511 gebe
ich den PIC ein, mit einem gan einfachen Programm: =========================== Start bcf PORTC,5 movlw D'7' movwf PORTC bsf PORTC,4 call wait bcf PORTC,4 movlw D'6' movwf PORTC bsf PORTC,5 call wait goto Start =========================== Das sollte
-
Thread
Taster an atmega32 lässt sicht nicht einrichten
regfile = "m32def.dat" $framesize = 32 $swstack = 32 $hwstack = 32 $crystal = 1000000 Config Portc.0 = Output Config Porta.6 = Input Porta.6 = 1 Do If Porta.6 = 1 Then Portc.0 = 1
Hi >Portc: Ist die JTAG-Fuse aus? PortC.0 hat nichts mit JTAG zu tun. MfG Spess
-
Thread
Xmega Pullups
schnittige Erläuterung. Laut meinem angehängten Header müsste meiner Meinung im Code stehen: PORTC.DIRSET = PORT_OPC_WIREDANDPULL_gc; oder PORTC.DIRSET = PIN0_bm; PORTC.DIRSET = PIN1_bm; seh ich das Richtig ?! und wenn ...dann müsste ich doch das ganz einfach Prüfen können
Servus, Mark schrieb im Beitrag #1850255: > PORTC.DIRSET = PIN0_bm; > > PORTC.DIRSET = PIN1_bm; mit DIRSET passiert noch gar nichts. da gibt es noch den Befehl zB. PORTC.OUTSET /PORTC.OUT Dann kannst du 3,3 Volt messen. Hier steht
-
Thread
ADC für PIC16F1823 funktioniert nicht
else if(voltage > 349 && voltage < 700) { PORTC = 0b000001; } else if(voltage > 699 && voltage < 1000) { PORTC = 0b000011; } else if(voltage > 999) { PORTC = 0b000111; } else{ PORTC = 0b000000; } } }[/c]
-
Thread
Komisches Problem mit Portansprechung
So wie es dort steht, werden folgende Ports angesprochen: 4x PortA blinkt ... 4x PortD UND PortC blinkt So und warum blinkt nun PortC bei PortD mit?!? Ich komme echt nicht dahint, wenn ich nun aber explizit angebe: [c] ... DDRC = 0xff; DDRD = 0xff; DDRA = 0xff; PORTA = 0xaa; PORTD = 0xaa; PORTC = 0x00; ... [/c] dann blinkt PortC nicht mit. Aber warum ist das so?! Ich kann echt beim besten Willen kein Fehler in meinem Code feststellen?!
-
Thread
Delphi 4 Variablen als Array ansprechen
Zuständen am AVR entsprechen. So wirds ja wohl eher nichts: ... var Form1: TForm1; porta,portb,portc,portd: Integer; ports:array[porta,portb,portc,portd] of integer; ... wäre ja nett, wenn ich hier eine Richtung gewiesen bekäme. Wenn alles fertig ist, wirds auch veröffentlicht... Danke
müssten entsprechend initialisiert werden: Port[0] = @Porta; Port[1] = @Portb; Port[2] = @Portc; Port[3] = @Portd; Ich mag mich mit der genauen Syntax vertun, da ich schon lange kein Pascal/Delphi mehr programmiere - aber das Konzept sollte klar werden.
-
Thread
SDA und SCL am ATmega8 als normale Portpins verwenden
int main() { DDRC |= (1 << PC5) | (1 << PC4) | (1 << PC3); while(1) { PORTC ^= (1 << PC5); // rote LED PORTC ^= (1 << PC4); // grüne LED PORTC ^= (1 << PC3); // blaue LED _delay_ms(500); } } [/c] Dieser Code sollte eigentlich die drei
ATmega8, sondern ein grösserer, hätt ich JTAG auf der Liste der Verdächtigen. Stopf mal zwischen den PORTC ^= ... jeweils ein Delay rein bzw. tausch die Abfolge der LEDs um. Wenn dann eine andere blinkt, liegts evtl. garnicht an der Hardware sondern möglicherweise am Compiler, dass der da Mist "optimiert
-
Thread
Beruflich für ARM CORTEX fit machen
case 1: PORTB = PORTB & (~(1 << iPin)) | (((uint8_t) value) << iPin); case 2: PORTC = PORTC & (~(1 << iPin)) | (((uint8_t) value) << iPin); } } int main (void) { setPin (0, 3, 1); setPin (1, 2, 0); }[/c] Auf einem STM32F103 Cortex-M3 könnte man das so ändern: [c]void
1: > PORTB = PORTB & (~(1 << iPin)) | (((uint8_t) value) << iPin); > case 2: > PORTC = PORTC & (~(1 << iPin)) | (((uint8_t) value) << iPin); > } > } > > int main (void) { > setPin (0, 3, 1); > setPin (1, 2, 0); > } Alles klar ja das ist gut, da spart man sich dann schon
-
Thread
Vom HD44780 lesen
out DDRC, temp ; RS und RW setzen ldi temp, 0b00000011 out PORTC, temp ; Kurz enablen und danach warten rcall lcd_enable rcall delay50us ; Erstes nibble nach lcd_data in lcd_data, PINC ; Hintere Teil kicken
lcd_enable: sbi PORTC, lcd_enablebit nop nop nop cbi PORTC, lcd_enablebit ret Funktioniert beim schreiben damit gut. CPU ist ein ATS908583 mit 8 MHz
-
Thread
Bascom Variablen
Port B , ' $regfile = "m32def.dat" $crystal = 8000000 'SDA und SCL definieren Config Sda = Portc.1 Config Scl = Portc.0 Dim X As Byte Dim A As Byte Dim B As Byte Dim Lesen As Byte CLS Do '---- schreibe
Eeprom_adr = &H0000 ' ab Adresse 0 schreiben Config Sda = Portc.1 ' I2C-Port festlegen Config Scl = Portc.0 ' I2C-Port festlegen Print "Config Finshed" Gosub Write_eeprom Wait
-
Thread
Neuling sucht Antworten :)
F_CPU 8000000U #include <util/delay.h> int main (void){ DDRD=0xFF; DDRC=0x00; PORTC=0x00; PORTC |= (1<<PC7); while(1){ if(PINC & (1<<7)){ PORTD=0x00; }else{ PORTD=0xFF; } } return 0; } [/c] Wenn ich durch den durchflussmesser
{ unsigned int count = 0; unsigned char vorher, jetzt; DDRD=0xFF; DDRC=0x00; PORTC=0x00; PORTC |= (1<<PC7); vorher = ( PINC & (1<<7) ); while(1){ jetzt = ( PINC & (1<<7) ); if( vorher != jetzt ) { // eine Änderung! if( jetzt == 0 )
-
Thread
SPI 2 ATMega8
(void) { while(!(SPSR & (1<<SPIF))){//während der Transaktion schnell blinken PORTC=0xff; _delay_ms(500); PORTC=0x00; _delay_ms(500); } return SPDR; } int main(){ unsigned char dane; SPI_SlaveInit(); while(1){ dane=SPI_SlaveReceive(); if(dane==0x01){ while(1) { PORTC=0xff;} //falls erfolgreich,LED's an } else { while(1){ //falls Transaktion gescheitert,langsam blinken PORTC=0xff; _delay_ms(2000); PORTC=0x00;
-
Thread
Einstieg in die µController-Programmierung
else RC0 = 1; // Ausgangsbit.0 vom PortA auf Highpegel setzen und hier auf 1, aber es immer noch PortC > ich danke euch für eure Hilfe im Voraus und werde meinen Beitrag > leisten, mein Wissen weiter zu geben. Danke
PORTA, Taster offen -> RA5 = 1 #define LED RC0 // LED ist der symbolische Name des Pin RC0-PORTC, LED = 1 -> LED leuchtet bit Merker1; bit Merker2; bit Merker3; int i; void main(void) { // Initialisierungen PORTA = 0b00000000; // PortA intialisieren PORTC = 0b00000000; // PortC
-
Thread
Slave Adresse auf einem LCD anzeigen
DIP Schalter eine Adresse am Slave von 0-255 einstellbar sein. Diese DIP Schalter benutze ich am PORTC des AVR. Mein Problem ist das ich gerne die Adresse die ich als DIP Schalter einstelle als Dezimalzahl auf einem LCD anzeigen möchte. Leider kann ich ja nicht einfach das Byte vom PORTC auf das
hi schau dir mal die ACSII Tabelle an in temp1, PORTC rcall convert ;2 Stellige Zahl teilen -> temp2 (10), Temp3 (1) ldi temp, 0b00110000 mov temp1, temp3 or temp1, temp rcall lcd_data ;temp wird ausgegeben mov temp1, temp2
-
Thread
mC wird "warm"
HeissHeissHeiss schrieb im Beitrag #2914962: > Mein Aufbau: > PORTC - Widerstände (ca. 330 Ohm) - 8 Anschlüsse von Anzeige > PORTD - 3 Transistoren - Kathode(n) von Anzeige - 0V Das sollte eigentlich gehen, Gesamtstrom unter 100mA. Leicht warm werden kann er da
> PORTC - Widerstände (ca. 330 Ohm) - 8 Anschlüsse von Anzeige sicher, dass das 330 Ohm sind und nicht irrtümlich 33 Ohm? Bei 330 Ohm hast du pro Sgement ca 10mA Gut, wenn alle eingeschaltet sind,
-
Thread
Drehimpugeber am Atmega8 mit FSM
= 0x00; //Auf Eingang setzten (B) DDRC = 0xFF; //Auf Ausgang setzten (C) //PORTC = 0xFF; //Pull ups aktivieren //Bei 0xFF ist Pull up aktiviert //Bei 0x00 ist Pull up deaktiviert int tempA;//= 0x00; int tempB;//= 0x00; int tempC;//= 0x00;
Interrupts aktivieren sei(); lcd_init(); int zustand = 0; //Aktueller Zustand PORTC = 0xFF; while(1) { tempA = PIND & 1; //0b0000000X tempB = PIND & 1<<1; //0b000000X0 tempC = PIND & 1<<2; //0b00000X00 if(iDreh == 23) { iZahl++;
-
Thread
PIC-Register Verhalten
Init ] movlb 0xFF incf PORTA,w movwf PORTA movwf PORTB movwf PORTC movwf PORTD [usw usf] [/avrasm] RA6 und RA7 werden für den Externen Quarz genutzt, daher tat sich die Vermutung auf, dass diese Bits evtl. deaktiviert werden. Tatsächlich hat es
ANSELA clrf TRISA clrf PORTB clrf ANSELB clrf TRISB clrf PORTC clrf ANSELC clrf TRISC clrf PORTD clrf ANSELD clrf TRISD ;movlw 0xFF ;movwf PORTA ;movwf PORTB ;movwf PORTC ;movwf
-
Thread
LCD ansteuerung mit Atmega8
= &B00000000 Ddrb = &B11111111 Admux = &B11000000 Adcsra = &B11100010 Portd = &B11111101 Portc = &B11111100 Portb = &B11111111 Mcucr = &B00001110 Sreg.7 = 1 'Config Lcdpin = Pin, Db0 = Portb.0 Db1 = Portb.1 Db2 = Portb.2, Db3 = Portb.3, Db4 = Portb.4, Db5 = Portb.5, Db6 = Portb
Ddrc = &B00000000 Ddrb = &B11111111 Admux = &B11000000 Adcsra = &B11100010 Portd = &B11111101 Portc = &B11111100 Portb = &B11111111 Mcucr = &B00001110 Sreg.7 = 1 Config Lcdpin = Pin , Port = Portb , E = Portd.6 , Rs = Portd.5 Dim Lb As Word Dim Hb As Word Dim A As Word Dim B As Word