-
Thread
Init Problem mit KS0066 (Conrad)
void led (unsigned char wert) { PORTC|= _BV(wert); _delay_ms (100); PORTC|= _BV(wert); } einschalten, warten, uuuund: einschalten ^^ ich hab das ganze grad am simulator und da zappelt der PIN_E recht brav. nach ner zeit bleibt
void led (unsigned char led) { PORTC |= _BV(led); _delay_ms (100); PORTC &= ~_BV(led); } Ich habe es jetzt korrigiert, dass die LED direkt wieder aus geht. Leider blinkt sie trotzdem nur 1x. Versucht habe ich jetzt auch schon
-
Thread
Nicht auffindbarer Fehler in Code für Roboter (Bascom)
Size = 30 , Bytematch = 13 Declare Sub Serial0charmatch() 'Config Outputs Config Portc.4 = Output 'M_left1a M_left1a Alias Portc.4 Config Portc.5 = Output 'M_left2a M_left2a Alias Portc.5 Config Portc.6
Size = 30 , Bytematch = 13 Declare Sub Serial0charmatch() 'Config Outputs Config Portc.4 = Output 'M_left1a M_left1a Alias Portc.4 Config Portc.5 = Output 'M_left2a M_left2a Alias Portc.5 Config Portc.6
-
Thread
Dmx mit Bascom generiert
X = 0 Dmx_werte(1) = 255 Do If X = 0 Then Portc.3 = 1 Portc.4 = 1 Toggle Portc.3 'Reset Waitus 88 Portb.0 = 1 Waitms 10 Print 0 Waitus 20
senden End If If Sendezaehler > 24 Then Gosub Senden '500ms Sendetakt Portc.1 = 0 Power Idle Portc.1 = 1 Loop Senden: 'Break Ausgang = 0 Portc.0 = 1 For I = 0 To 60 nop Next I Portc.0 = 0 Ausgang = 1 For I = 0 To 20
-
Thread
gr. LCD testcode need help
z[60]; uint16_t c; SIGNAL(SIG_OVERFLOW0) { unsigned char a,i,j; TCCR0=(0<<CS00); if(PORTC&0b00000100)cbi(PORTC,2); else sbi(PORTC,2); if(PORTD&0b00000100)cbi(PORTD,2); else sbi(PORTD,2); sbi(PORTD,1); for(i=0;i<16;i++) { cbi(PORTD,0); cbi(PORTD,5); a=i+16;
z[60]; uint16_t c; SIGNAL(SIG_OVERFLOW0) { unsigned char a,i,j; TCCR0=(0<<CS00); if(PORTC&0b00000100) PORTC |= (0<<PC2); else PORTC |= (1<<PC2); if(PORTD&0b00000100) PORTD |= (0<<PD2); else PORTD |= (1<<PD2); PORTD |= (1<<PD1); for(i=0;
-
Thread
KS0108B Displaytech 64128A
mal kurz über Deine Schaltung geschaut. Dazu ein paar Anmerkungen: - Ich würde statt PortB den PortC nehmen (außer Du hast was wichtiges mit PortC vor, z.B. du nutzt JTAG). Denn über PortB programmierst Du vermutlich den AVR, Wenn Du das Display an PortC anschließt, bitte JTAG in den Fusebits
********************* Lowerline : Lcd "3 - startzeile" 'Startzeile 0 Portc = 192 En = 1 : Waitms 10 : En = 0 Waitms 100 : Do : Loop Until Taste = 0 '****************************
-
Thread
AD9850-Modul mit AtMega steuern
[i]; while ((SPSR & _BV(SPIF)) == 0) /* wait */; } /* Update now. */ PORTC |= _BV(1); PORTC &= ~_BV(1); } //... int main(void) { uint32_t ddsval = 1000000ul; //... fq_ud(val_to_dds(ddsval)); //... } [/c]
while ((SPSR & _BV(SPIF)) == 0) { // wait while busy } } // Update now. PORTC |= _BV(1); // set PORTC.Bit1 PORTC &= ~_BV(1); // res PORTC.Bit1 } void main(void) { uint32_t ddsval = 1000000ul; AD9850_wr_serial(ddsval); // 1MHz while(1) { //
-
Thread
Register von uCs Gesperrt
7 und 8 bit - Ports PORTB und PORTD sind 8bit groß,PortC nur 7bit. 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?
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
Coundown Timer
ever { number_output (0); cli(); // switch off interrupts for blank display PORTC = 0b00001111; _delay_ms (500); sei(); _delay_ms (200); // switch on interrupts for 00:00 display } return 0; } [/c] hier LED_display.h [c] // 4 x 7 digit LED display
Michael H. schrieb im Beitrag #6801590: > PORTC &= ~(1 << pin); PORTC = ~(1<<pin);
-
Thread
PIC Assembler Probleme
etwas schwer: [code] void clear_ADR(void){ // Adressbus löschen asm("BCF PORTC,14"); // Bit 14 beim PORTC Register löschen asm("BCF PORTC,13"); asm("BCF PORTC,2"); asm("BCF PORTC,1"); } [/code] Hierbei meckert der Compiler (HI-Tech C Compiler dsPIC
Optimierung wen die werte des PORT bekant sind bei der ausfürung ein: movlw B’00000000’ movwf PORTC ist wesentlich schneller als: bcf PORTC, 1 bcf PORTC, 1 bcf PORTC, 1 bei erster variante wird ein wert in das Passende Register geschriben, bei den bcf wird jedesmal das register ausgelesen
-
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.0 Config Sda = Portc.1 Config Twi = 400000 I2cinit Config Timer1 = Timer , Prescale = 64 On Timer1 Isr_von_timer1 Timer1 = 65286 Enable Interrupts Enable Timer1 Dim Temp_out_h As Byte Dim Temp_out_l As Byte
-
Thread
static volatile variable in einer Funktion
Interessante Sicht! Der Zugriff wird ja sogar auch ohne die Addition durchgeführt. Ein [C] PORTC = PORTC; [/C] muss ja auch den Port lesen und den gelesenen Wert wieder zurück schreiben. Ob man da jetzt noch 0 dazu addiert oder nicht, macht dafür keinen Unterschied. Es gibt ja auch I/O-Register
dein Rolf M. schrieb im Beitrag #6232695: > Ein [c] PORTC = PORTC; [/c] > muss ja auch den Port lesen und den gelesenen Wert wieder zurück > schreiben. ist da schon etwas schwieriger. Muss der "geänderte" Wert von PORTC am Ende nochmal gelesen werden
-
Thread
Wie kann ich den Inhalt eines Arrays in einen port schreiben?
TIMER0_OVF_vect ) // Overflow Interrupt Vector { voice++; if (voice == 16) { PORTC |= (1<<PC5); //Reset High voice =0; } else { PORTC &= ~ (1<<PC5); //Reset LOW } PORTC ^= (1<<PC4); //CLK } [/c] mit [c] if (voice == 8) [/c]
TIMER0_OVF_vect ) // Overflow Interrupt Vector { voice++; if (voice == 8) { PORTC |= (1<<RESET); //Reset High voice =0; PORTC &= ~ (1<<RESET); //Reset LOW } PORTC |= (1<<CLK); PORTC &= ~(1<<CLK); } [/C]
-
Thread
Wie setze ich Ausgänge mit einer for-Schleife?
[c] for (i=0; i<7; i++) { PORTC = (PORTC && ~(1<<i)) || (((int)Fach[i] > 500 && Fach[i] < 800) << i); } [/c]
habe das mal so gemacht wie du es geschrieben hast, nämlich Fach[] <= 500 Pin in PORTC unverändert lassen Fach[] > 500 && Fach[] < 800 Pin in PORTC setzen Fach[] >= 800 Pin in PORTC löschen
-
Thread
Bascom Port Nibble Nixie
schon, aber ohne Erfolg. Leider klappt es aber immer noch nicht so, wie es sollte. Die LED die an PORTC.4 hängt, ist in diese Konstallation tot. Der momentane Code sieht nun so aus: 'Temp ist als byte definiert, wert4 ebenfalls ' Nixie hängen an Portc.0-3, led an Portc.4 Temp = Portc
Temp = Portc sollte das nicht Temp = Pinc heißen? Unterschied PORTC und PINC Ansonsten: eine Schattenvariable für das Port verwenden und nur ausgeben, nie einlesen.
-
Thread
Code auf Mega32 läuft nicht? Minimalcode
io.h> #include <util/delay.h> #include <stdio.h> #define IO_DDR DDRC #define IO_PORT PORTC #define SELF_HOLD 4 #define LED 5 int main() { //test DDRA |= (1<<0); PORTA |= (1<<0); for(;;); //ende test PORTC |= (1<<SELF_HOLD); DDRC |= (1<<SELF_HOLD) | (1<<LED); // configuring pins as output for(int i = 0; i<10; i++) { PORTC ^= (1<<LED); _delay_ms(200); _delay_ms(200); _delay_ms(100); } PORTC |= (1<<LED); PORTC &= ~(1<<SELF_HOLD); // selbsthaltung lösen µC stromlos!! return; } [/c] Dieser
-
Thread
Xmega Pin Zustand effizient spiegeln
Eventgesteuert per DMA // Pro Flanke ein Durchlauf des DMA_CH0 Interrupts EVSYS.CH0MUX = EVSYS_CHMUX_PORTC_PIN2_gc; // Pin auswählen EVSYS.CH0CTRL = EVSYS_DIGFILT_8SAMPLES_gc; // Ausgangspins vorbereiten und richtigen Pegel ausgeben PORTC.DIRSET = PIN3_bm | PIN5_bm; if (PORTC.IN & Pin2_bm) PORTC.OUTSET = PIN3_bm | PIN5_bm; else PORTC.OUTCLR = PIN3_bm | PIN5_bm; // reset DMA controller DMA.CTRL = 0; DMA.CTRL = DMA_RESET_bm; while ((DMA.CTRL & DMA_RESET_bm) != 0); // configure
-
Thread
AVR + 74HC165 + UART
=1; if(PINC & (1<<PINC0)) Data_to_send[a] |= 1; PORTC |= (1<<Input_Clock); // Clock Flanke erzeugen um Register um eine Stelle zu schieben PORTC &= (0<<Input_Clock); //Clock wieder löschen } }
=1; if(PINC & (1<<PINC0)) Data_to_send[a] |= 1; PORTC |= (1<<Input_Clock); // Clock Flanke erzeugen um Register um eine Stelle zu schieben PORTC &= ~(1<<Input_Clock); //Clock wieder löschen } }
-
Thread
Bascom@ATmega16: Softclock und PORTC
ansonsten läuft der µC mit internem Takt. Wenn ich die LEDs an einen anderen Port anschließe (und PORTC garnicht konfiguriere) funktioniert alles wie erwartet. Mit dem Mega8 hatte ich das Problem auch noch nicht. Ich vermute, das Bascom (1.11.9.5) bei "Config Clock = Soft" den kompletten PortC des
-
Thread
Tasterabfrage xmega8E
/*PORTC.2 auf low UV-LEDs->aus*/ PORTC.OUT &= ~ PIN3_bm; /*PORTC.3 auf high WW-LEDs->aus*/ PORTC.OUT &= ~ PIN4_bm; /*PORTC.4 auf high KW-LEDs->aus*/ //PORTC.OUT |= PIN3_bm; /*PORTC.3 auf high WW-LEDs->an 100%*/ //PORTC.OUT |= PIN4_bm; /*PORTC.4 auf high KW-LEDs->an 100%*/ PORTC.DIR = 0x1C; /*PORTC auf Ausgang LEDs*/ /*System ON/OFF*/ PORTC.DIR |= PIN1_bm; /*PORTC.1 auf Ausgang ON/OFF*/ PORTC.OUT
-
Thread
Bascom: Brauche Hilfe bei bestimmten DS1820 auswählen
= 32 $crystal = 16000000 $baud = 9600 Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.4 , Db6 = Portc.5 , Db7 = Portc.1 , E = Portc.2 , Rs = Portc.0 Config 1wire = Porta.0 Dim A(8) As String * 20 Dim B(8) As Byte Dim I As Byte A(1) = 1010734ab40108002c Do
= 32 $crystal = 16000000 $baud = 9600 Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.4 , Db6 = Portc.5 , Db7 = Portc.1 , E = Portc.2 , Rs = Portc.0 Config 1wire = Porta.0 Dim A(8) As Byte A(1) = 1010734ab40108002c Do 1wverify A(1) If Err = 0
-
Thread
Bascom, AVR Lüftersteuerung, Falsche Drehzahl mit High-Side-PWM
8000000 $framesize = 32 $swstack = 32 $hwstack = 32 'LCD Config Config Lcdpin = Pin , Db4 = Portc.7 , Db5 = Portc.6 , Db6 = Portc.5 , Db7 = Portc.4 , E = Portc.1 , Rs = Portc.0 Config Lcd = 16 * 2 Cls 'Port Config Config Portb.3 = Output 'fan1 PWM
8000000 $framesize = 32 $swstack = 32 $hwstack = 32 'LCD Config Config Lcdpin = Pin , Db4 = Portc.7 , Db5 = Portc.6 , Db6 = Portc.5 , Db7 = Portc.4 , E = Portc.1 , Rs = Portc.0 Config Lcd = 16 * 2 Cls 'Port Config Config Portb.3 = Output 'fan1 PWM
-
Thread
Rückgabe von Getkbd() - BASIC
ich das alles umgeschrieben und wenn ich das Programm draufgespielt habe, dann leuchtet die LED an Portc.0 immer. (Blinkt nicht) Was ist da falsch? [pre]$regfile = "m32def.dat" $framesize = 32 $swstack = 32 $hwstack = 32 $crystal = 1000000 Config Portb = Input Config Portc.0 = Output
Query_matrix() ' Abfrage der Tastaturmatrix If Key <> 0 Then Portc.0 = 1 Waitms 1000 Portc.0 = 0 Waitms 1000 Elseif Key = 5 Then Portc.0 = 1 Waitms 100 Portc.0 = 0 Waitms 100 'Ss = Mid(s , Key , 1) 'Print "Taste " ;
-
Thread
Atmega8 bleibt nicht in der Schleife?
ldi r16, 3 out PORTD, r16 // interne Pullup-Wiederstände aktivieren mainloop: cbi PORTC, 0 cbi PORTC, 1 cbi PORTC, 2 sbis PIND,5 // skip if Bit cleared rcall Wasser sbis PIND,4 rcall Eis sbis PIND,3 rcall Crushed //sbic PIND, 2 //rcall Rotate sbis PIND, 1 rjmp Lock
/---------------------Lock-------------------/ Lock: // rcall wait1 sbis PIND, 1 sbi PORTC, 4 sbis PIND, 1 brne lockloop brne mainloop //---------------------Unlock-------------------/ Unlock: cbi PORTC, 4 brne mainloop // Unterprogramm Wasser --------------
-
Thread
Taster mit LED Dauer, Blinken
{ PORTC &=~(1<<PC0); _delay_ms(500); PORTC |=(1<<PC0); _delay_ms(500); } if (i==3) { PORTC &=~(1<<PC0); } } return(0); }
Markus S. schrieb im Beitrag #3150061: > while (i==2) > { > PORTC &=~(1<<PC0); > _delay_ms(500); > PORTC |=(1<<PC0); > _delay_ms(500); > } wie soll i in dieser Schleife jemals seinen Wert ändern? -> du hast eine logische Endlosschleife gebaut, die
-
Thread
Globale Variable im Interrupt u. Daten an PORT ausgeben?
nicht in der Interrupt Routine übernommen. 2. Problem Wenn ich die CAN Message sende um den PORTC auf High zu setzen blinken die LEDs nur kurz auf und PORTC ist nicht mehr 0xFF wie ich es gesetzt habe sondern 0x00.... Ich hoffe ihr könnt mir bei meinen Problemen helfen ... Und schon mal
Arne Schroeder wrote: > 2. Problem > Wenn ich die CAN Message sende um den PORTC auf High zu setzen blinken > die LEDs nur kurz auf und PORTC ist nicht mehr 0xFF wie ich es gesetzt > habe sondern 0x00.... 1. Du setzt in main() in der 4. Anweisung PORTC auf 0x00 nicht auf 0xFF
-
Thread
Probleme mit For-Schleife und Rückgabeparameter
Wenn an PORTC.0 und/oder PORTC.1 ein Taster o.ä. hängt, dann ist die Portkonfiguration <TRISC = 0x00> falsch - damit ist der gesamte PORTC nämlich OUTPUT.
wiederverwenden, sollten sie gebraucht werden. Chris B. schrieb im Beitrag #3287319: > Wenn an PORTC.0 und/oder PORTC.1 ein Taster o.ä. hängt, dann ist die > Portkonfiguration <TRISC = 0x00> falsch - damit ist der gesamte PORTC > nämlich OUTPUT. Das habe ich schon angepasst, war ein alter code
-
Thread
Probleme mit dem isr(int0_vect)
BV(ISC01); // Triggern auf fallende Flanke des INT0 PORTD |= _BV(PD2); while( 1 ) { PORTC |= _BV( PC0 ); _delay_ms( 1000 ); } } ISR (INT0_vect) { PORTC &= ~ _BV( PC0 ); } [/c] ... auch ausreichend ist, um die Funktion des externen Interrupts für sich alleine zu testen
; // Triggern auf fallende Flanke des INT0 > PORTD |= _BV(PD2); > > while( 1 ) { > PORTC |= _BV( PC0 ); > _delay_ms( 1000 ); > } > } > > ISR (INT0_vect) > { > PORTC &= ~ _BV( PC0 ); > } Was machen Sie da im Interrupt ? Weil bei mir 2 Led´s aufleuchten.
-
Thread
Eine Sprungtabelle, aber wie?
--------------------------------------------------- ;Ports als Eingänge konfigurieren, PortD und PortC ;Schwimmschalter SW1 Pin 20 PORTD PD6 ;Schwimmschalter SW2 Pin 25 PORTC PC3 ;Schwimmschalter SW3 Pin 26 PORTC PC4 ;Schwimmschalter SW4 Pin 27 PORTC PC5 ;Schwimmschalter SW5 Pin
DDRD,6 ;Schwimmschalter SW1 sbi PORTD,6 cbi DDRC,3 ;Schwimmschalter SW2 sbi PORTC,3 cbi DDRC,4 ;Schwimmschalter SW3 sbi PORTC,4 cbi DDRC,5 ;Schwimmschalter SW4 sbi PORTC,5 cbi DDRD,1 ;Schwimmschalter SW5 sbi PORTD,1 cbi DDRD,0
-
Thread
Signal über Ports leiten
es gibt mehrer Möglichkeiten. 1. Wenn der ganze Port gespiegelt werden soll: PORTC = PINB; 2. Wenn du nur einen einzelnen PIN spiegeln willst: PORTC &= (PINB&(1<<3)); hier von PINB.3 auf PORTC.3 3. Wenn du einen einzelnen PIN "quer" spiegeln willst: if (PINB&(1<<3)) PORTC |= (1<<4); else PORTC &= ~(1<<4); //hier von PINB.3 auf PORTC.4 Ich kann jetzt leider nicht garantieren, dass das ganze Funktioniert, alles nur Theorie. Wenn nicht, dann melde dicht, und ich probiers mal aus. Gruß
-
Thread
ATmega328p PC5 als output funktioniert nicht
sieht jetzt so aus: int main(void) { DDRC |= (1 << PC5); DDRC |= (1 << PC2); PORTC |= (1 << PC5); PORTC |= (1 << PC2); while(1) { _delay_ms(500); PORTC &= ~(1 << PC5); PORTC &= ~(1 << PC2); _delay_ms(500); PORTC |= (1 << PC5); PORTC
-
Thread
C-Program für Atmega8
Zunächst...was meinst du mit PINC 04=1? Ist damit der Pin #4 am PortC gemeint? [c] main() { DDRD = 0xFF; DDRC = 0x00; PORTC = 0x02; PORTC = 0x04; do { if (!(PINC&0x02)||!(PINC&0x04)) PORTD = 0xFF; else
Jetzt hat geklappt. Ich habe wie Sie mir empfohlen haben statt PORTC = 0x02; PORTC = 0x04; Das eingesetzt: PORTC = 0x02|0x04; Danke So wies aussieht ich muss das Grundwissen lernen. Weiß jemand wo finde ich spezial C-Sprache für Atmel Mikricontroller.
-
Thread
bascom zeitunabhängig ausgang setzen.
SPS war nur Hinweis auf Vorgehensweise. Definiere vorher mal Motor_on alias Portc.2 Deine Abfrage sieht dann so aus: If Stellenstunde = _hour And Stellenminute = _min And Anaus = 1 Then Set Motor_On rauswerfen ----> If Umdrehungen = 2 Then Reset Portc.2 ---hat
ist? Zitat: If Umdrehungen = 2 Then Umdrehungen = 0 If Umdrehungen = 2 Then Reset Portc.2 End If Warum nicht so: If Umdrehungen =2 then Umdrehungen = 0 reset portc.2 end if
-
Thread
PC über USART auf MC und zurück
RXC))) // warten bis Zeichen verfuegbar { uart_putc(UDR); // Zeichen zurück senden PORTC ^= 0xff; // PORTC toggeln } } int main(void) { Portinit(); UARTinit(); while(1) { Usart_Rx(); } return(0); }
// } bis was passiert also quasi warten soll uart_putc(UDR); // Zeichen zurück senden PORTC ^= 0xff; // PORTC toggeln [/c]
-
Thread
PORTS schalten nicht
festgelegt und das Abschalten der Jatg Fuses bringt keinen unterschied... es sieht sogar so aus das z.B PORTC 1 immer hin und her Springt... zwischen 0 und 3.5V
; DDRD = 0xFF; while(1) { PORTD = 0xFF; PORTA = 0xFF; PORTB= 0xFF; PORTC = 0xFF; } }
-
Thread
Problem mit Assembler (ATmega8 / AVR-GCC)
beschreiben: Ausgänge CLR click OUT DDRB, click ; DDRB mit 0x00 beschrieben: Eingänge OUT PORTC, click ; LEDs ausschalten OUT PORTB, click ; und PullUps deaktivieren loop: IN click, PINB ; die Taster auslesen und OUT PORTC, click ; und auf die LEDs spiegeln RJMP
LDI click, input OUT _SFR_IO_ADDR(DDRB), click ; Eingänge LDI click, 0x00 OUT PORTC, click ; LEDs ausschalten OUT PORTB, click ; und PullUps deaktivieren loop: IN click, _SFR_IO_ADDR(PINB) ; die Taster auslesen und OUT _SFR_IO_ADDR(PORTC), click
-
Thread
stacksicherung bei 2 ints
Masse),wie immer. Portc dient alternativ auch als Input für 74254 Bustreiber, ebenfalls 74154 selektiert. Dort sind Taster mit Pullup 5K R´s angeschlossen. Taster schalten gegen Masse. Portc,wie gesagt,als Input,hi-Z, definiert. Trotzdem Schreiben mit "out" über portc in die 74373 Latches möglich.Genau da ist der Widerspruch. Passiert z.B. in "io_write:" Zeile: "out portc,data" Die Daten kommen problemlos im 74373 Latch an (Led Beweis). Wie kann das sein,wenn
-
Thread
ATmega32A; 595; 165 Code Hilfe benötigt
RCLOCK_PORT PORTC #define RCLOCK_DDR DDRC /////// #define RCLOCK_high() (RCLOCK_PORT |= _BV(RCLOCK_PIN)) #define RCLOCK_low() (RCLOCK_PORT &= ~_BV(RCLOCK_PIN)) //////////////// #define CLOCK_PIN
RCLOCK_PORT PORTC #define RCLOCK_DDR DDRC /////// #define RCLOCK_high() (RCLOCK_PORT |= _BV(RCLOCK_PIN)) #define RCLOCK_low() (RCLOCK_PORT &= ~_BV(RCLOCK_PIN)) //////////////// #define CLOCK_PIN
-
Thread
Mega 16 mit LCD tuts nicht...(BASCOM)
den Fusebits hat es nichts zu tun bei mir, sondern irgendwie ist die Belegung von meinem LCD-Port (PORTC) anders. Ich habe ein kleines Testproggi geschrieben um die LEDS des STK500 mal einzeln anzusprechen. Geht bei PORTA, PORTB aber nicht bei PORTC. Benutzt Du auch PORTC ? Greetings Karlheinz
Hallo Wolfgang, ich habe gerade Deinen Beitrag im Forum bzgl. des Portc.3 am Mega 16 gefunden. Ich habe das selbe Problem: Das Display lässt sich über Portb problemlos ansteuern. Wenn ich das alles auf PortC verlege funktioniert nichts mehr, obwohl ich das JTAG Fusebit
-
Thread
piso register per Software in c auslesen
Eingang fürs serielle einlesen DDRC = ( (1 << CLK) | (1 << PL)); //CLK und PL als Ausgang PORTC |= (1 << PL); //PL wird high while (1) { _delay_ms(500); dataFromReg(); } return 0; } void dataFromReg(void) { uint8_t i = 0; PORTC |= (1 << CLK); //clk auf high wegen des Aufbaus PORTC &=~ (1 << PL); //pl auf Wert der Register einfrieren PORTC |= (1 << PL); //pl high für den nächsten Aufruf for (i = 0; i < 16; i++) { PORTC |= (1 << CLK); //clk high erstes
-
Thread
Erste schritte mit AVR
ich als Code geschrieben. #include <avr/io.h> int main (void) { int lauf=0; PORTC=0x20; DDRC |= _BV(DDC5); while(1) { PORTC=0x20; for(lauf=0;lauf<1000;lauf++); PORTC=0x00; for(lauf=0;lauf<1000;lauf++); } }
F_CPU 1000000 // 1 Mhz #include <avr/io.h> #include <util/delay.h> int main (void) { PORTC = 0x20; DDRC = 0x20; while(1) { PORTC = 0x20; _delay_ms( 1000 ); PORTC = 0x00; _delay_ms( 1000 ); } } [/C] Für die 1000000 setzt du dein tatsächliche Taktfrequenz
-
Thread
kann wdt_reset() wegoptimiert werden?
// Reinigen der Kontakte { PORTC |= _K1_on // Rel.1 an PORTC &= ~_K1_off // Rel.1 ab Rel_Freigabe(Ausschaltdauer); // Freigabe - Impuls für sicheres Ausschalten // Ausschaltdauer = 30 _delay_ms(100-Ausschaltdauer); //anschl. wieder einschalten nach mind. 100ms PORTC &= ~_K1_on // Relaisausgang Pin Low PORTC |= _K1_off // Relaisausgang Pin High } // Relais hängt? / reinigen der Kontakte Rel_Freigabe(Einschaltdauer); // Freigabe - Impuls für
-
Thread
TLC5940 Code
SPI_INTLVL_OFF_gc; //SPI aktivieren SPIC.CTRL |= SPI_ENABLE_bm; //XERR aktivieren PORTC.PIN2CTRL = PORT_OPC_PULLUP_gc | PORT_ISC_FALLING_gc; //PIN configurieren Pullup & Fallende Flanke PORTC.INTCTRL |= PORT_INT0LVL_MED_gc; // PortC interrupt0 -> medium-level setzen PORTC.INT0MASK
Zähler rücksetzen mask_out = 0x80; // Maske rücksetzen } } } PORTC.OUTSET = TLC5941_XLAT; //XLAT kurz auf 1 um daten zu übernehmen PORTC.OUTCLR = TLC5941_XLAT; PORTC.OUTCLR = TLC5941_MODE; //wieder auf GS-mode zurücksetzten } [/c] [c] //THX to Falk Brunner
-
Thread
Int 0 und timer bitte um Hilfe
$regfile = "m8def.dat" $crystal = 4000000 Config Timer1 = Timer, Prescale = 64 Config Portc = Output Config Portd.4 = Output Led Alias Portc.0 Led2 Alias Portc.1 Led3 Alias Portc.2 Led4 Alias Portc.3 Led5 Alias Portc.4 Led6 Alias Portc.5 Led7 Alias Portd.4 Dim A As Single Dim
$regfile = "m8def.dat" $crystal = 4000000 Config Timer1 = Timer, Prescale = 64 Config Portc = Output Config Portd.4 = Output Led Alias Portc.0 Led2 Alias Portc.1 Led3 Alias Portc.2 Led4 Alias Portc.3 Led5 Alias Portc.4 Led6 Alias Portc.5 Led7 Alias Portd.4 Dim A As Single Dim
-
Thread
Problem mit if-Abfrage
lst-Datei Quellcode: if ((PINB & 1<<3) == 1) /*((PINB & _BV(3)) == 1) (PINB &~8) */ PORTC=127; else PORTC &=251 ; PORTC=255; lst-file { if ((PINB & 1<<3) == 1) /*((PINB & _BV(3)) == 1) (PINB &~8) */ 3a2: 86 b3 in r24, 0x16 ; 22 3a4: 99 27
0 3aa: 01 97 sbiw r24, 0x01 ; 1 3ac: 19 f0 breq .+6 ; 0x3b4 PORTC=127; else PORTC &=251 ; 3ae: aa 98 cbi 0x15, 2 ; 21 PORTC=255; 3b0: 25 bb out 0x15, r18 ; 21 3b2: f7 cf rjmp .-18 ; 0x3a2 3b4: 35 bb
-
Thread
Bascom / ATMega16 Problem Einsteiger
regfile = "M16def.dat" $framesize = 16 $swstack = 16 $hwstack = 16 $crystal = 1000000 Config Portc.0 = Output 'Ein Pin wird aus Ausgang konfiguriert PC0 (also Pin0 von Port C) Portc.0 = 1 'Pin wird auf High, also 5V geschaltet End Die Led ist an PC0 und natürlich GND angeschlossen
Hallo Leute, danke erstmal für eure Hilfe!! hab auch direkt probiert, also nur Config Portc.0 = Output 'Ein Pin wird aus Ausgang konfiguriert PC0 (also Pin0 von Port C) Portc.0 = 1 'Pin wird auf High, also
-
Thread
PWM einlesen beim mega32
DDRC=0xFF; DDRB=0b11110000; while(1) { if (aktuell_pwm_l >= 0 && aktuell_pwm_l < 40) { PORTC|=(1<<PC0); } if (aktuell_pwm_l >= 40 && aktuell_pwm_l < 80) { PORTC|=(1<<PC1); } if (aktuell_pwm_l >= 80 && aktuell_pwm_l < 120) { PORTC|=(1<<PC2); } if (aktuell_pwm_l >= 120 && aktuell_pwm_l < 160) { PORTC|=(1<<PC3); } if (aktuell_pwm_l >= 160 && aktuell_pwm_l < 200) { PORTC|=(1<<PC4); } if (aktuell_pwm_l >= 200 && aktuell_pwm_l < 255) { PORTC|=(1<<PC5); } } } [/c]
-
Thread
switch-case-Anweisung zu langsam
[C] #include <avr/io.h> volatile uint8_t * PORT[3]={ &PORTB, &PORTC, &PORTD }; int main() { uint8_t Befehl = 23; if(Befehl&1) // Setzen { *PORT[Befehl>>4] |= (1<<((Befehl&0x0F)>>1)); } else // löschen { *PORT[Befehl>>4] &= ~(1<<((
mit [c] volatile uint8_t * PORT[3]={ &PORTB, &PORTC, &PORTD }; [/c] bekomme ich die Meldung: Build succeeded with 0 Warnings. Ohne das *volatile* bekomme ich allerdings die Warnung: *initialisation discards qualfiers from pointer target type*
-
Thread
Hoher Strom bei Taster am Eingan
/delay.h> void main (void) { int I; DDRA = 0xFF; DDRB = 0xFF; DDRC = 0x00; PORTC = 0xFF; while(1) { PORTA = ~I; PORTB = ~PINC; //PORTC = ~I; _delay_ms (100); if (PINC == 0b11111110) { I++; } if (PINC== 0b11111101)
OK. Ähm. Asche auf mein Haupt Ich habs falsch Beschrieben. die Tasten hängen natürlich an PortC
-
Thread
problem mit Header Datei
(am ADC) { c=adc(0); if( c <= 158 ) { PORTD = ( 1 << LED1 ); PORTC=0x01; } else if( c <= 374){ PORTD = ( 1 << LED2 ); PORTC=0x00; _delay_ms(300); PORTC=0x01; _delay_ms(300); } else if( c < 1023) { PORTD = ( 1 << LED3 ); PORTC=0x00; _delay_ms(1000); PORTC=0x01; _delay_ms(1000); } else PORTD = 0; PORTC=0x00; } } void init_ports() { DDRD=0xFF; //PORTD als Ausgang
-
Thread
flankenerkennung mit exklusiv oder
ich es so versucht [c] uint8_t old,tick; int main(void) { while(1) { if (old^PORTC) { tick++; old = PORTC; } } } [/c] aber ich möchte das ich nur bei änderung des Portc3 tick incrementiert wirt! Endschuldige mich für meine Dummen Fragen !!!
Ich ändere in einem Timerinterrupt Portc3 nur zur simulation!!!! (Nachher werde ich das über einen externen Eingang machen und endsprechend auf Pin umschreiben ) Nochmal zu meiner Frage wie ich nur auf änderung des einen Bit (PORTC3