-
Thread
Interupt mit Timer
10 ) << 4 ) | ( Sekunden / 10 ); PORTB = ( Minuten % 10 ) << 4 ) | ( Minuten / 10 ); PORTC = ( Stunden % 10 ) << 4 ) | ( Stunden / 10 ); ... } } [/C] Sieht doch gleich viel besser aus :-)
< 4 ) | ( Sekunden / 10 ); PORTB = ( Minuten % 10 ) << 4 ) | ( Minuten / 10 ); PORTC = ( Stunden % 10 ) << 4 ) | ( Stunden / 10 ); } ... } } [/c] So hat der Atmel noch weniger zutun...
-
Thread
ATMEGA16 Timer
code mache: [c] if((count >= adc_wert) && (start == 0x01)) { count = 0; PORTC = 0x00; // PORTC auf 0 (Debugg) start = 0x00; // Hilfsvariable auch auf 0 //OCR0 = 255; // Wenn der count = dem ADC Wert entspricht // sollte der PWM Ausgang
ca 3 sec. schaltet sie auf ganze Helligkeit und dann wird si richtig ruckartig heller und dünkler, geht aber nie ganz aus. an was kann es liegen, bin voll ratlos?! Grüße Lukas
-
Thread
Attiny2313 + LM7001 + Bascom - Wer kann helfen?
Freude, das es nun endlich geht ... Pustekuchen ... Es geht auch mit deinem Code nicht. Der Sinus will sich einfach nicht verändern. Ich habe natürlich auch die Frequenzwerte für Nwert immer mal verändert um zu schauen ob es daran
Marc V. schrieb im Beitrag #4589875: > Ja, es geht nun mal nicht anders. Das sehe ich anders. Zielgerichtete Fehlersuche geht anders. Es fehlen (nur als Beispiel) Angaben zur Frequenz des VCO bei 1V Regelspannung und 4V Regelspannung. Woher weiss
-
Thread
Attiny1616 USART Verständnissproblem
PA0? Es geht doch um PA2.
S. Landolt schrieb im Beitrag #6355115: > PA0? Es geht doch um PA2. Tut mir leid, ich habe das überlesen und denke meinem Vorredner geht es da ebenso. Ja an PA2 liegt GND
-
Thread
18f2550 - Interrupt feuert nicht
INTCON,GIE Loop Goto Loop ; Endlosschleife ORG 0008h nop nop bsf PORTC,1 bcf INTCON,RBIF RETFIE ORG 0018h nop nop bsf PORTC,1 bcf INTCON,RBIF RETFIE END [/c] Wenn das Programm jetzt in der Endlosschelife hängt sieht
@CJ Dein PIC geht nach dem Reset mit RB0...4 als analoge Eingänge an den Start. Eine Flankenerkennung ist so ja wohl nicht möglich. Lösche das Bit PBADEN in der Config, dann klappts auch mit dem Interrupt. Gruss,
-
Thread
ATMega8 interner ADC
} } ISR (ADC_vect) { out(c); PORTB |= (1<<PB1); //Zur Kontrolle, ob er ins ISR geht ADCSRA |= (1<<ADSC); } void out (volatile uint16_t value) { PORTB ^= (1<<PB0); PORTD &= ~0xF0; PORTC &= ~0x3E; PORTD |= (uint8_t)((value >> 2) & 0xF0); PORTC |= (uint8_t)
Tomato schrieb im Beitrag #6804969: > c = ADCL; > c += (ADCH << 8); Kleiner Tipp, das geht auch einfacher: c = ADCW; oder c = ADC; Zu deinem Problem: schreib in der ADC-ISR PORTB |= (1<<PB0); //Zur Kontrolle, ob er ins ISR geht dann schaltet es auch den richtigen Pin :-) PB0
-
Thread
Probleme UART, Baudrate Atmege8
hwstack = 32 $crystal = 14755600 $baud = 115200 Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portc.1 , Db5 = Portc.0 , Db6 = Portb.2 , Db7 = Portb.1 , E = Portd.7 , Rs = Portd.6 Config Lcdbus = 4 Initlcd Waitms 50 Cls Dim I As Byte Do For I = 65 To 90 Step 1 Cls Waitms
So, mit dem neuen Display geht alles, war wohl dann doch das Display :-( Aber Respekt an den Versender für den tollen Service.
-
Thread
Xmega PWM zählt nicht richtig(?)
Counters ein. Das Problem: Wenn ein Ausgang der PWM über mehrere Perioden auf High bleiben soll, geht er am Ende (Anfang?) einer Periode kurz (einen PWM-Takt?) auf Low. Das, obwohl z.B. TCC0.CCABUF = TCC0.PERBUF gesetzt ist und laut Manual hier PIN0 an PORTC über mehrere Perioden kontinuierlich auf
#2959620: > Das Problem: Wenn ein Ausgang der PWM über mehrere Perioden auf High > bleiben soll, geht er am Ende (Anfang?) einer Periode kurz (einen > PWM-Takt?) auf Low. Das, obwohl z.B. TCC0.CCABUF = TCC0.PERBUF gesetzt > ist und laut Manual hier PIN0 an PORTC über mehrere Perioden > kontinuierlich
-
Thread
AD-Wandlung dauert zu lange (30µs) [Atmega32]
Datenblatt angegebenen 7µs? [c] ISR(TIMER1_OVF_vect) //Wird bei pos. PWM-Flanke ausgeführt { PORTC |= (1<<PC0); // Pin high für Zeitmessung des ADC´s am Oszi ADCSRA |= (1<<ADEN); //ADC enable ADCSRA |= (1<<ADSC); //ADC starten } ISR(ADC_vect) { UIST = ADCW; // Wert holen ADCSRA &= ~(1<<ADEN); // ADC deaktivieren PORTC &= ~(1<<PC0); // Pin low, Zeitmessung ende messen = TRUE; // Berechnung freischalten } main: { .... ADMUX = 4; // Kanal waehlen ADMUX |= (1<<REFS0); // interne Referenzspannung nutzen
-
Thread
binäruhr - verliert zeit [code]
aus PD4 kommt keine leistung (bei zwei uCs getestet) > DDRD = 0b01101111; //definiert portC ping 0-3 als ausgang Wenn die zweite Zeile dein gültiger Code ist, hast du PD4 als Eingang konfiguriert. MfG Spess
vorwiderstand lag es nicht!) betreibe jetzt die gleiche konfiguration nur an einem anderen pin und es geht
-
Thread
Kondensator entladen
irgendwie was mit "LOW" schreiben? Ne das tönt eher nach Arduino. In C machst du das eben mit PORTC &= ~(1<<Channel); (Bit Nr. "Channel" von PortC wird so auf 0 gesetzt). Besuch mal den Link von obigem Beitrag und lies besser auch mal das ganze Tutorial hier durch. Der 10nF Kondensator sollte
die Antworten Um den "Entladungspin" dann wieder "zu" zu schalten kann ich dann etwas später PORTC|=(1<<Channel); schreiben oder? Danke Thomas
-
Thread
ATmega8: PortB.2 nutzen
erledigt, die Bits gehen wohl doch. irgendwas muss an meinem Programm flasch sein .... mit Assembler geht es.
An deinem Programm ist nix falsch! wenn es mit ASM geht scheint der Compiler schrott zu sein? Kein plan. aber hin und wieder gibt es immer komische Konstellationen, geht mir auch so :)
-
Thread
PIC - delay macht mehr als es soll
/LED1 RA2 = 0; //LED2 // Ist Taster 0 an PortC gedrückt? if(RC0==1) { //Ja RA1 = 1; //LED3 RC1 = 1; //LED4 RA0 = 1; //LED5 } else { //
Erster Preis geht an Stefan es fehlte das CMCON Register. Mit [c]CMCON = 0b00000111;[/c] klappts. Danke
-
Thread
ATmega32 + LCD TC1602-08
gemacht! [code] $regfile = "m32def.dat" $crystal = 16000000 Config Portd = Output Config Portc.0 = Output Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2 Config Lcd = 16 * 2 Portc.0 = 0 Initlcd Cls Cursor Off Locate
Verdrahtung. Wenn da ein Fehler drinn ist (und ja, ich hab mich selbst dabei auch schon vertan; das geht schneller als einem lieb ist), dann KANN sich die Software abmühen soviel sie will, es wird nicht funktionieren. Leider gilt die Umkehrung nicht. Wennd dann immer noch nicht geht, dann ist entweder
-
Thread
DS18S20, Atmega8 und Winavr
released) #define wIn DDRC &= ~wmask // set 1-wire bus high #define wH PORTC |= wmask // set 1-wire bus low #define wL PORTC &= ~wmask // get 1-wire bus input (bus released) #define wR PINC & wmask Aber ich kann nicht sehen, wie das mit wmask
wRxbit(); if ( bit ) data |= (1<<7); #else // Mit Fehler // Das geht nur gut, wenn wRxbit() 1 oder 0 zurückliefert // Das geht schief, wenn über wmask mehrere Pins im Spiel // sind (z.B. bei dir "Man kann wmask auf 0xFF setzen") // oder der
-
Thread
Problem mit PIC und Bluetoothmodul
include <delays.h> #include <stdio.h> #include <sw_uart.h> #include <usart.h> #define SWTXD PORTC #define SWTXDpin 6 #define TRIS_SWTXD TRISC #define SWRXD PORTC #define SWRXDpin 7 #define TRIS_SWRXD TRISC #pragma code void main(void) { OpenUART(); //make BlueMod visible + settings
man am Anfang mehrere Fehler gleichzeitig eingebaut hat. Du kannst dann einen Fehler beheben und es geht immer noch nichts, daraus zu schliessen das die Änderung deswegen aber keinen Einfluß hat ist dann aber auch verkehrt. Ein planloses rumprobieren führt garantiert nicht zum Ziel.
-
Thread
Wie macht man solche Lichtmodes? Lauflicht, PWM und Co
ein Board mit einem ATMega128A. Der ATMega erzeugt 32 PWM Kanäle. Der komplette PortA, PortB, PortC und PortE laufen als PWM. Ich habe dazu den Software PWM Code hier aus dem AVR-GCC Tutorial von 8 auf 32 CH geändert. Dieser läuft mit Timer1. Nachdem alle 32 PWMs funktionierten habe ich
PB4); PWM_PORTB &= ~(1<<PB5); PWM_PORTB &= ~(1<<PB6); PWM_PORTB &= ~(1<<PB7); PWM_PORTC &= ~(1<<PC0); PWM_PORTC &= ~(1<<PC1); PWM_PORTC &= ~(1<<PC2); PWM_PORTC &= ~(1<<PC3); PWM_PORTC &= ~(1<<PC4); PWM_PORTC &= ~(1<<PC5); PWM_PORTC &= ~(1<<PC6); PWM_PORTC &= ~(1<<
-
Thread
SPI zwischen zwei ATMEGA8A mit SPI-Interrupt
den Oszi hab ich MOSI, PB1/SS sowie SCK gemessen und die Signale machen genau das was erwartet. (SS geht low für den Zeitraum der Übertragung, SCK Takted und MOSI sendet). Ich weis nicht was ich noch Versuchen kann bzw. Wo mein Fehler liegt und ich hoffe das mir jemand von euch helfen kann? Zum Aufbau
ATMEGA8A, mit 8MHZ interner Oszillator getaktet, einer (der Slave) in STK500 der auf die Leds über PORTC angeschlossen ist. Der Master ist an einem Experimentier Board und mit kable verbunden. (ich habe einen skizzenhaften Schaltplan angehängt an den die SPI Verbindungen ausgezeichnet sind) Besten
-
Thread
Tastaturmatrix Entprellen
DDRC &= ~(ROW0 | ROW1 | ROW2 | ROW3); // Inputs DDRD &= ~(COL0 | COL1 | COL2 ); // Inputs PORTC |= ROW0 | ROW1 | ROW2 | ROW3; // with pullup PORTD |= COL0 | COL1 | COL2; // with pullup PORTD &= ~COL0; // Low DDRD |= COL0; // Output
man so ein Programm nur nach Mustervergleich erweitert, ohne es zu verstehen. :-) Bei Kochrezepten geht das eher (bin selber ein Hobbykoch), aber in der Software nicht (immer).
-
Thread
Timer1 LED Uhr test mit modulo
holger schrieb im Beitrag #3859001: > Natürlich geht das. Frag dich mal ob du wirklich jeden > main() Zyklus deine Ports xoren willst? Oder vieleicht > nur wenn counter sich ändert? So funktioniert aktuell dann gar nichts. Ich denke mal, dass sich
> switch(Counter % 7) Beim Überlauf von counter geht wieder alles durcheinander;) Schon mal drüber nachgedacht?
-
Thread
erste Schritte mit Assembler
] ; korrekt, aber nicht empfohlen (s. u.) IN R0, PINB-0x20 OUT PORTC-0x20, R1 [/avrasm] I/O-Register an Adressen >= 0x60 liegen außerhalb der Reichweite von IN und OUT, so dass hier immer LDS und STS verwendet werden muss. Die Befehle CBI, SBI, SBIC und SBIS
=0x03 Somit ist hier, bezogen auf das obige Beispiel (gottseidank) [avrasm] IN R0,PINB OUT PORTC, R1 [/avrasm] vollkommen korrekt. Das wird einen Assembler-Einsteiger vermutlich verwirren... Gruß Tom
-
Thread
MMC SD library FAT16 FAT32 read write
Viel besser! Jetzt gehts!!! Danke!
define MMC_Direction_REG DDRB [/c] zu [c] #define MMC_Write PORTC.OUT #define MMC_Read PORTC.IN #define MMC_Direction_REG PORTC.DIR [/c] Jetzt ist das Problem, dass der CS Pin auch an Port C sein sollte, geht das irgendwie bei Deinem Board? [c]
-
Thread
UV-Laserdrucker II
ZweiSchere schrieb im Beitrag #4345732: > Es geht um die BELICHTUNG. Es geht um die ZEIT für die BELICHTUNG ... wollte ich schreiben ...
hab 32Bit, geht aber leider auch nicht. trotzdem danke Gruß Klaus
-
Thread
20x4 an einem Mega32
alles richtig eingestellt. Ich btreibe das Display im 4bit Port-mode an PortC des Mega32. Eine in das Programm integrierte LED blinkt, sodass ich weiß, dass mein Programm auch abgearbeitet wird. Aber das Display rührt sich nicht. Die beiden Balken bleiben stehen, aber sonst
Hi im Lieferzustand ist der JTAG-Port auf 4 Pins des PortC aktiviert. Damit lassen sich diese Pins nicht für IO nutzen. Also JTAGEN-Fuse -> unprogrammed und schon sollte die Sache laufen. Matthias
-
Thread
TWI Initialisierungsproblem
*Formale Kontrolle des Quelltextes* // #1 PORTC.DIRSET |= PIN0_bm; // Als Ausgang TWI SDA PORTC.DIRSET |= PIN1_bm; // Als Ausgang TWI SCL // #2 PORTD.PIN0CTRL=PORT_OPC_WIREDAND_gc | PORT_ISC_BOTHEDGES_gc; PORTD.PIN1CTRL
Es geht was, zwar noch nicht so wie gewünscht, aber er sendet was. Danke Stefan für deine Hilfe, jetzt kann ich weiterarbeiten! eine Frage noch, woher hast du denn die Beispiele ? Ich find sie nicht auch
-
Thread
Arduino und Assembler Programmierung
muss dann für alle SFR_IO's wieder gemacht werden. Es wäre einfacher gewesen die keywords 'PORTB,'PORTC','PORTD',... zu benutzen. Ich hoffte, es geht mit einem geschickten #include an der richtigen Stelle. Dann ist es einfacher einen *.S Tab zu benutzen. Danke für Deine Antworten.
Hallo, Nochmal : Es geht nicht um dieses Beispielprogramm! Es ist Schwachsinn das in Assembler zu schreiben. Es geht ums Prinzip von (nicht "keywords" sondern) Präprozessor-Makros. Übrigens habe ich doch eine Methode gefunden
-
Thread
TFT 480 X 320 falsche farben ILI9481
hmm.es sollte doch aber stimen das ich DB0,1,2,3..7 an PortB 0,1,2,3...7 angeklemmt habe und PortC dann weiter db DB8,9,10..15 und am xmega an PortC 0,1,2,3..7 oder?
vermutlich ein BUG?!? Wenn ich TFT_16bit_Set_Reg(0x21, 0x05); und damite infach alles invertiere, gehts :-)
-
Thread
XBee-Pro 868 Digital Input
Also mit CE=0 bei Beiden gehts auch nicht. Woher weiß der 2. XBee, dass er das Eingangssignal vom XBee von Pin 19 auch an PIN 19 ausgeben soll?
$baud = 9600 Dim S As String * 18 On URXC OnRxD Enable URXC Enable Interrupts Config Portc.5 = Output Portc.5 = 0 Do //Vergleich der Hexwerte Loop End Onrxd: 'S = S + Chr(udr) S = Chr(udr) Return [/c] Kann mir jemand bei dem Vergleich auf den HEX Wert helfen?
-
Thread
Problem mit main und Timer1, ATMEG8
); } return 0; } ISR(TIMER1_OVF_vect) { if(PORTC & 0x01) TCNT1 = STANDARD; if(!(PORTC & 0x01)) TCNT1 = LOAD; PORTC ^= (1<<PC0); } [/c]
@Tueftler Danke du bist ein Schatz, es geht:) Was genau bewirkt denn dieses volatile? @Karl Heinz Buchegger Ja das hatte ich auch danach vor, wollte es aber einmal so versuchen, muss ma wieder nen bisschen in die Timer reinkommen:) Also
-
Thread
Ausgänge bei 1,7V
Hallo Gemeinde. Ich möchte auf PORTC(Bit 2,3,4,5,6) 5V als Ausgänge haben. Wenn ich schreibe: /* System: Atmega16 Stk500 */ #define IO_DDR DDRC #define IO_Port PORTC #define DL_Mstr PC2 #define DL
jemand die Lösung für? Seit Jahren der Dauerläufer: http://www.mikrocontroller.net/search?query=portc+geht+nicht Oder für Schreibfaule: http://www.mikrocontroller.net/search?query=portc
-
Thread
ATMega8515 mit 512kB SRAM klappt nicht
Port E = 0 : 64kB Bank 0). Ich habe es mal auf das Notwendigste reduziert: Zuerst wird A8-15 auf Portc geschrieben und ein Latch geclocked, danach wird der gleiche Port fuer A0-A8 beschrieben. Der Datenport ist PortD und die DDRs sind alle (teilweise vorab) passend gesetzt. ldi ladr
out portb,mp out portc,ladr ; set Address (A0-A7) out portd,count ; generate some values in mp,pinb ; SRAM /WE:0
-
Thread
ILI9486L in Betrieb nehmen
); _delay_ms(2); PORTD |= (1<<RDX); _delay_ms(2); } void setData(uint16_t *Data){ PORTC = (*Data & 0xff); PORTA = ((*Data >> 8) & 0xff); }[/c]
PORTG &=~ (1<<WRX); setData(Data); PORTG |= (1<<WRX); } void setData(uint16_t Data){ PORTC = (Data & 0xff); PORTA = ((Data >> 8) & 0xff); }[/c]
-
Thread
Ausgänge bei 3.2V
Einleitung didaktisch schon mal gut. "Geht euch nix an" LED an 12V ! Ausgänge als Ausgänge definiert?
die nach pragmatischen Lösungen suchen? Ich verstehe es nicht. Muss ich auch nicht. Also bitte! geht zur Seite wenns ums Fach geht. Hier mal zu allen die produktiv Vorschläge ( und damit meine ich ALLE ) lieferten. Großen Dank. Insbesondere an Stefan S.!!! Ich machte tatsächlich den Fehler immer
-
Thread
Altes EPROM auslesen Intersil 6654A (2xCE) mit Arduino
ATmega2560 hat doch ein externes Memoryinterface, da kann man einfach den Chip direkt anschließen. /CE1 geht an ALE, d.h. das Latch ist schon im Chip, einen extra 74HC573 braucht man nicht. Q7..0 werden mit A7..0 an AD7..0 der AVR angeschlossen. /S geht an /RD des AVR. /CE2 an GND, A8 an A8 Nicht vergessen
vermeidet unnoetige Loeterei und Kabelsalat. Das Timing ist voellig unkritisch da statisch. SRAM geht damit ebenso. S' cool man!
-
Thread
avr inline assembler
t" "adc %A3, %2 ;1 cycle" "\n\t" "out %5, r17 ;cs=0;rw=0; cs und rw in PORTC;1 cycle" "\n\t" "lpm ;3 cycles" "\n\t" "out %4, __tmp_reg__ ;1 cycle" "\n\t" "out %5, r16 ;cs=1;rw=1; cs und rw in PORTC;1 cycle" "\n\t" "in r15,%6
t" "adc %A3, %2 ;1 cycle" "\n\t" "out %5, r17 ;cs=0;rw=0; cs und rw in PORTC;1 cycle" "\n\t" "lpm ;3 cycles" "\n\t" "out %4, __tmp_reg__ ;1 cycle" "\n\t" "out %5, r16 ;cs=1;rw=1; cs und rw in PORTC;1 cycle" "\n\t" "in r15,%6
-
Thread
eigenen port aus einzelnen "Portpins" zusammensetzen
Meines Wissens geht das nicht direkt. Aber du kannst dir natürlich eine Funktion schreiben, die das aufdröselt und das übergebene Byte an PD0-PD5 und PC0-PC2 schreibt.
}; const uint8_t SEG_PC[] = { ... }; ... PORTA = (PORTA & ~SEG_PA_BITS) | SEG_PA[x]; PORTC = (PORTC & ~SEG_PC_BITS) | SEG_PC[x]; [/c]
-
Thread
Benötige Hilfe beim Einstieg in die Mikrocontrollerwelt mit PIC
= 0b00000000; while(1){ PORTA = 0b00000000; PORTB = 0b00000000; PORTC = 0b00000000; __delay_ms(1000); PORTA = 0b11111111; PORTB = 0b11111111; PORTC = 0b11111111; __delay_ms(1000); } }
Threadstarter ging es um Hilfe und Infos und er hat schon was mit AVRs gemacht. Die Aussage war: 'Ja es geht, wenn Du Dir einen gewissen stil angewöhnst geht es leichter. Wenn Du mit etwas weitermachst das Du schon kennst geht es noch einfacher.' Worauf immer Deine Überzeugungen sich auch begründen, von
-
Thread
Atmega16 UART empfängt nicht - senden klappt
Wie kann ich denn am besten testen, ob sich was am Eingang tut? Ich habe leider kein Oszilloskop. Geht das mit einem Digitalmultimeter? Marco
wie hier: http://www.mikrocontroller.net/topic/167829#1604209 ziemlich ärgerlich, aber jetzt gehts ja :)
-
Thread
Probleme mit RS232 Zugriff
nicht entprellt habe? Wie kann ich meinen Taster softwaremäßig entprellen ohne interrupt Routine? Geht da überhaupt?
Bekannten so übernommen. Leider komme ich mit dem Datenblatt vom ATMEGA8535 nicht richtig klar. Wo geht da eigentlich genau hervor wie ich welche Register mit welchen Werten befüllen muss ((Baudrate 9600))??
-
Thread
Speicherzuweisung von 2 zwei 2dim Arrays vertauschen
] Damit muss ich aber jetzt beim Zugriff auf diese Daten den Pointer benutzen und z.B. aus [c]PORTC = currentFrame[row][ct][/c] wird [c]PORTC = *(cfPointer+row*8+ct)[/c] Es funktioniert zwar und vielleicht behalte ich es auch fast so bei (nur Arraydefinition+Pointer mit malloc+Pointer austauschen
#2335044: > Damit muss ich aber jetzt beim Zugriff auf diese Daten den Pointer > benutzen und z.B. ausPORTC = currentFrame[row][ct]wirdPORTC = *(cfPointer+row*8+ct) Nein. Mach doch einfach PORTC = cfpointer[(row * 8) + ct)]; draus.
-
Thread
Atmega8 ADC Frustration (Assembler)
initialisieren sei ;Interrupts zulassen main: SBI portc, 1 rcall wait CBI portc, 1 rcall wait ldi r18, 0b11001111 out ADCSRA, r18 ;ADC conversion start rjmp main
dann keine PullDown-Verbraucher dranhängen. Du hast nicht geschrieben, ob Deine LED an +5V oder Gnd geht.
-
Thread
Taster und STK500 = Bad?
Hallo, ich bin recht neu wenn es um darum geht ATMEGA µC zu programmieren. In der Schule habe ich jedoch viel Erfahrung mit dem 80c51. Jedenfalls bin ich in dem Jahr in dem ich eine Diplomarbeit schreiben muss. Dafür brauch ich einen ATMEGA8, nun
stdint.h> int main(void) { DDRB = 0xff; // Port B wird als Ausgang definiert DDRC = 0x00; PORTC|=1; /*Pullup auf PORTC.0 einschalten, wir bekommen also logisch 1, wenn der Taster nicht gedrückt ist */ for(;;) { if ((PINC&0x01)==0) //die taster auf dem STK500 schalten nach masse
-
Thread
Ports sprechen über?
macht. Ich sage mal, entweder Relais weg von PortG oder LCD auf 4-Bit-Betrieb umstellen und dann PortC nur für LCD und PortG für die Schaltperipherie nehmen. Den LCD über 3 Ports zu verstreuen, ist nich unbedingt sinnvoll. Gruss Jadeclaw.
Z.B. hab ich mit einer älteren GCC Verion einzelne I/O PINS so gesetzt: sbi (PORTC,WR); cbi (PORTC,WR); Das funktioniert wiegesagt mit der GCC Version die ich jetzt hab nicht- das versteh ich auch nicht
-
Thread
Logiksignale nur durchlassen, falls nicht mehr als eine 1
, sonst wirds beim PortC undurchsichtig ;-)
habe, was genau empfiehlt sich für eine solche Anwendung? Es geht um 5V Signalpegel.
-
Thread
Grafik LCD mit T6963 flackert + Streifen
btfss STA0 goto main Was soll denn der Quatsch mit goto main da? Aus einer Subroutine geht man nur mit return raus. Sonst läuft dir irgendwann der Stack über, und bumm!
call read_status btfss STA0 goto write_command btfss STA1 goto write_command ;PORTC auf Ausgang umschalten banksel TRISC movlw d'0' movwf TRISC banksel PORTC movfw command movwf DAT bsf RD_ ;read disabled bcf WR_ ;write enabled bsf CD_
-
Thread
blumenbewässerung mit dem atmega16
void) { if(adc_value>=700) //Pump ON trigger point { PORTC|=(1<<0); } else if(adc_value<=600) //Pump Off trigger point { PORTC&=~(1<<0); } } [/c] leiter one erfolg fehlermeldung von avr studio C:\Dokumente
hat sich seit Jahrhunderten bewährt. Ich helf gerne aus, wenn es um das eine oder andere Detail geht. Meinetwegen auch schon mal, wenn ein Ansatz verkorkst ist. Aber ich mach nicht dein Projekt von vorne bis hinten und bring dir auch noch bei 0 beginnend 'so nebenbei' die Grundlagen bei.
-
Thread
AVR ATMEGA644 IOs
Hilfe genommen... Kann mir bitte jemand auf die Sprünge helfen, wie der Code lauten muss um z.B. I portc pin0 ==> O porta pin0, I portc pin1 ==> O porta pin1... Habe viele Dinge ausprobiert und bin mittlerweilen frustriert und kurz vor der Resignation. P.S. nicht böse werden über meine Unerfahrenheit
Funktion, weil du da nicht mehr rauskommst. Beim Hauptprogramm ist das aber erwünscht. Mit PORTA = PORTC; kopierst du A auf C und negierst nicht. Du solltest vielleicht noch bei den Ausgängen die Pullup-Widerstände setzen. @ Peter Ja, ich weiß, dass das geht. Man kann es auch im Makefile machen.
-
Thread
SPI anfällig für Störungen?
Modus laufen- MUSS aber nicht. Wenn dann noch Signalverzerrungen und/oder Laufzeiten dazu kommen, geht's halt schief.
case 4: lcd_set_cursor(buf[0]-40, buf[1]-40); break; case 5: PORTC |= 0x08; //Hintergrundbeleuchtung an break; case 6: PORTC &= ~0x08; //Hintergrundbeleuchtung aus break; default: lcd_string("SPI-ERROR!!"); } bufpos
-
Thread
ATmega32 16PU erster Schritt mit AtmelStudio
Und das Board hat auch nur den Chip und ein paar LEDs dran. Mit meinem "jungfreulichen" Chip geht das leider nicht. Bisher habe ich auch nur ISP angeschlossen und eben die eine LED wie oben beschrieben. Ich vermute, dass es mit der Einstellung im Programm zu tun hat. Das mit den Fuse-Bits
endif #include <avr/io.h> #include <util\delay.h> int main(void) {DDRC |= (1<<6); do{ PORTC |= (1<<6); _delay_ms(1000); PORTC &= ~(1<<6); }while(1); } [c]
-
Thread
Debug-Problem in AVR-Studio 5
Schau Dir auch nochmal diesen Teil an: [c] if (ServoNr==9) { PORTC &= ~(servos_closed[ServoNr].port); ServoNr=0; } while (servos_closed[ServoNr].when-servos_closed[ServoNr-1].when<=3) [/c] Wenn die ServerNr == 0 ist, dann greifst Du mit ServerNr-1 wieder
geht auf Low. Und OCR1B wird mit dem nächsten Wert gesetzt. Und so schalten sie schön brav der Reihe nach aus. Die while-Schleife ist drinnen weil es ja sein könnte, daß z. Bsb. Servo 1 und Servo 2 sich