-
Thread
Alarmsteuerung
case W; if(eingang& (1<<Ta) | (1 << STO) == (1 <<Ta)) { zustand=B; } break; } PORTC |= ausgang[zustand]; ausgang[0] |= (1<<L) | (1 << S); ausgang[1] &=~((1<<L) | (1<<S)); ausgang[2] = ausgang[2] &~ ((1<<S) | (1<<L)); Das Programm funktioniert leider nicht ich
daher: weniger ist mehr. Das hier [C] if(eingang& (1<<Ta) | (1 << STO) == (1 <<Ta)) [/C] geht so gar nicht. Der Zustand wird verlassen, wenn * Taster auf 1 ist UND * Störung auf 0 Solange du mit Operator-Precendence noch auf Kriegsfuss stehst, schreib das dann auch genau so hin und
-
Thread
PIC16F870 startet nicht
Projekt, und als erstes möchte ich mal eine LED auf RC3 blinken lassen - nur um zu sehen, ob's generell geht... Programmieren möchte ich in C. Ich habe folgendes Programm: #include <htc.h> __CONFIG(BOREN_ON & CP_OFF & WDTE_OFF & PWRTE_ON & FOSC_HS); #ifndef _XTAL_FREQ #define _XTAL_FREQ 16000000 #endif main(void) { TRISC = 0; ADCON1 = 7; for(;;) { PORTC = 0xff; _delay(100); //__delay_ms(500); PORTC = 0x00; _delay(100); //__delay_ms(500); } } Das ganz wird kompiliert mit dem Hitech PICC: picc
-
Thread
programm dokumentieren Gesperrt
// endlos Schleife { if(debounce(&PIND,PD0)) // das verstehe ich auch nicht PORTC =~ PORTC; // invertiert den Wert auf PORTC } }
verschiedene Algorithmen aufzählen, eventuell kurz beschreiben und den eigenen genauer erklären. Weiter geht es dann mit der Beschreibung der Umsetzung im eigenen Programm (Initialisierung, Programmablauf) und der Quellenangabe, woher das stammt ;-) Da kannst du schon mal einiges schreiben...
-
Thread
großes Programm funktioniert nicht
Programm klein bleibt (Laut MPLAB 2700 Zeilen bzw laut Memory Usage Gauge: 4036 von 16384 Words) geht alles Wunderbar. Sobalt das Programm aber über eine gewisse Größe (solte bei 4000-4500 words leigen) geht, steigt das Programm quasi aus. Die Leds machen was sie wollen, der µC macht meiner meinung
stecken (habe den PIC ausgelesen er ist beschrieben). Mir kommt das einfach Spanisch vor wenn alles geht und eine Zeile Code alles futsch macht. mfg Hebel Zieher
-
Thread
Anfänger Frage zu PWM beim ATMEGA8
auch das tutorial zu interrupts bringt mich kein stück weiter. kann mir vlt jemand erklären wie das geht? welche interrupts ich brauche und wofür oO lg
Kanäle besteht, ein simpler 5 Zeiler in der Hauptschleife, der dann auch noch banal zu parametrieren geht.
-
Thread
Warum läuft mein Programm nicht?!
Interrupt freigibst, dann MUSST du auch eine zugehörige ISR schreiben. Freigeben und keine ISR haben geht gar nicht. (D.h. es geht schon. Nur führt das dazu, dass der Standardhandler einen Prozessor-Reset auslöst) Ich denke, das ist dein eigentliches Problem.
eingebaut (das mag etz lustig klingen, aber so versuche ich immer Festzustellen wie weit das Programm geht): PORTC ^= (1<<PC2); mit dem Oszi hab ich erkennen können das der Pin auch dort hin und her wackelt. Also ist es so zu verstehen das ich bis in die Init() gekommen bin dann er den Pinzustand geändert
-
Thread
Inline Assembler Code Probleme
r19", "r20", "r30", "r31", "memory"); [/c] Das funktioniert auch ganz gut. Die Bitfolge wird an PORTC geschickt und zur Kontrolle auf LEDs ausgegeben. Alles so wie es soll. Das Delay mit den Nops ist hier nur dazu da, dass ich überhaupt was sehe. Mein Problem tritt im nächsten Schritt auf.... In
alle durch, die etwas mit Pointern zu tun haben (und auch sowieso alle anderen), aber der Fehler geht nicht weg. Das .s File ist im Temp nach Kompilerangabe, aber ich finde es dort nicht. Falls es überhaupt hilft da rein zu schauen? Was mache ich hier falsch? Ich würde mich über Hinweise sehr freuen
-
Thread
Problem mit einfachem Taster
simulieren, indem ich vorerst den PIN mit Masse verbinde. Schalter sollen an die Pins 0, 1 und 2 von PORTC kommen. Ich verwende folgende selbstgeschrieben Routinen: void initPortCin() { DDRC &= ~(_BV(0)|_BV(1)|_BV(2)); //PortC als Eingang PORTC |= _BV(0)|_BV(1)|_BV(2); //PullUp Widerstände
Sorry, Nachtrag: Ich erwarte, dass alle High sind weil ich jetzt setze: DDRC=0x00; PORTC=0xFF;
-
Thread
PWM Schwelle kurzzeitig erhöhen
OCR2 = (F_CPU/256)-1; //alle 1 sec ein Interrupt sei(); ... ISR(TIMER2_COMP_vect) { PORTC ^= (1<<PC5); // Test-LED soll blinken // Hier würde dann das Rücksetzen von OCR1A passieren. } [/code] Nur leider geht die LED sofort beim Start an und geht nie wieder aus. Ich weiß leider
einen extrem langsamen CPU-Takt hast, wirst du nicht bis auf 1 Hz herunter kommen. > Nur leider geht die LED sofort beim Start an und geht nie wieder aus. Wenn du mal schnell genug guckst (also bspw. mit einem Oszi), dann wird sie wohl nur sehr schnell blinken ...
-
Thread
SD Karte via ATmega644 und SPI ansprechen
meine Glaskugel einen der Standardfehler. Wenn der SS vom SPI nicht als Ausgang konfiguriert wird geht gar nichts. Beim 644 glaube ich PB4. Bitte mal nachsehen!
chipselects*/ #define CS_ENC PD5 #define CS_SD PC6 #define SPI0_PORT PORTD #define SPI1_PORT PORTC /*methods to select */ #define select_enc() SPI0_PORT &= ~(1 << CS_ENC) //sets chip select for EN28j60 to 0 #define unselect_enc() SPI0_PORT |= (1 << CS_ENC) //sets chip select for EN28j60
-
Thread
PORT-B des ATMEGA168 und auch des ATMEGA48 immer $00
ldi speca, LOW(RAMEND) out SPL, speca ldi speca, HIGH(RAMEND) out SPH, speca trotzdem bleibt PORTC 0
der m168.inc breq wait_adc ; deklariert sein) [/avrasm] Das geht natürlich nicht so!
-
Thread
LCD Ansteuerung Atmel ATxmeag 128 A3
Folgende Signale verwende ich: 1: RS PORTD.OUT 2: EN 3: R/W -- GND 4: D0 PORTC.OUT 5: D1 6: D3 7: D4 8: D5 9: D6 10: D7 leider bezieht sich das Tutorial auf nur einen PORT. Die Befehlstruktur weicht etwas ab, da ich einen Atmel ATxmega 128 A3 verwende und keinen
drauf müssten. In Internet sehe ich diverse Display Boards mit vielen Kapazitäten ??? Ich hoffe es geht auch erstmal ohne Ciao
-
Thread
Problem: Page-Wechsel bei LCD DG-12232 klappt nicht
LCD_RESET_PORTA= 0b11100010 ; reset display [...] ; Display an ldi lcd_command, LCD_COMMAND_PORTC out PORTC, lcd_command ; LCD ist im "command"-Modus... ldi lcd_data, LCD_ON_PORTA out PORTA, lcd_data ; ...und bekommt das Kommando "an" cbi PORTC, CS1 sbi PORTC, CS1 cbi PORTC, CS2
passiert ; Kommando ldi lcd_command, 0<<A0 | 1<<CS1 | 1<<CS2 | 1<<READ | 0<<WRITE out PORTC, lcd_command ; jetzt ist das LCD im "Command"-Modus ldi lcd_data, LCD_SETPAGE_PORTA mov tmp3, tmp2 ; tmp2 sichern (nur zur Sicherheit, push/pop geht auch) or lcd_data, tmp3 ; Befehl "springe
-
Thread
Timer0 mit abfallender Flanke
exakten Zeitablaufs Glückssache wird und bei der nächsten Sourcecodeänderung alles den Bach runter geht. Die interruptfreie Alternative würde statt j genau den Timerzähler, also z.B. bei Timer0 TCNT0 abfragen. Dabei muss der Timer vorher ins Laufen gebracht werden (Taktquelle, Prescaler...) und der
behandelt wurde, dann wird der nächste Ereignisgeber untersucht, ob es etwas zu tun gibt. Und dann geht das ganze Spiel wieder von vorne los: ein Ereignisgeber nach dem anderen wird abgeklappert ob es etwas zu tun gibt.
-
Thread
RFM12 Statusabfrage
werden Empfänger und Sender synchronisiert (immer 01 Bitwechsel), 2D D4 sagt dem Empänger, jetzt gehts los. Holger
und ausschalten am Ende der Routine sein ? Hab es jetzt aber nur eben mal überflogen. Prinzipiell geht es ja, du empfängst ja was. Holger
-
Thread
Atmega erkennt Framing Error nicht
eine PWM programmiert habe und eine LED mit einem übermittelten Zahlenwert gedimmt habe. Auch das geht. Wenn ich aber ein FrameError erzeuge um ein BREAK-Befehl zu geben, passiert beim Mega8 nix. Er kommt nicht in die if-Abfrage rein (getestet mit einfachem Einschalten einer LED) woraus ich schließe
Simulation) DmxCount = StartAddress; // ChannelCount resetten gDmxState = BREAK; PORTC |= (1<<PC4); // Andere LED, die angehen soll, wenn ein Framing-Error erkannt wurde } else if (DmxState == BREAK) { if (DmxByte == 0){ gDmxState= STARTB; } // Normalen StartCode
-
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
switch / case macht etwas was ich nicht verstehe
: ISR (TIMER2_OVF_vect) { pause=pause+1; switch (pause) { case 1: PORTC=0b11111110; break; case 3: PORTC=0b11111101; break; case 5: PORTC=0b11111011; break; usw usw usw bis:
Geht das nicht auch kürzer? [c] ISR (TIMER2_OVF_vect) { PORTC = ~(1 << (pause/2)); pause = (pause == 11) ? (0) : (pause + 1); } [/c] mfg mf PS: Oder so? [c] ISR (TIMER2_OVF_vect) {
-
Thread
Problem mit PWM aus Timer2 mit ATmega8535
Timerinitialisierung gemacht wird. Es steht zwar nirgendwo das es so, wie Du es gemacht hast, nicht geht, aber man könnte es mal probieren. Schreib mal bitte ob das geholfen hat. Ein kleiner Hinweis noch: >Spannend ist hier auch, daß im TEXT des >Datenblattes gesagt wird, COM21:0=1 wäre für "toggle
r19 .def counter=r20 .def lcd_page=r21 .equ FREQ=7372800 .equ TIME50MUS=123 .equ LCD_COMMAND_PORTC=0b00001110 .equ LCD_DATA_PORTC=0b00001111 .equ A0=0 .equ CS2=1 .equ CS1=2 .equ READ=3 .equ WRITE=4 ; Steuer-Pins: ; PC0: A0 (0: Command, 1: Data) ; PC1: CS2 (0: right display active
-
Thread
Atmega8 UART TX Fehlersuche
unsigned int baud); void main (void) { uartInit(25); #asm("sei"); do { transmitUART('X'); PORTC.2=!PORTC.2; delay_ms(100); } while(1); } void uartInit(unsigned int baud) { UCSRB=0x18; //0b00011000; UCSRC=0xA6; //0b10100110; UCSRC&=0xEF; //0b01111111; UBRRH=(baud>>8); UBRRL=baud & 0xFF
jetzt mal eingearbeitet. Standart mässig steht der Codevision Compiler schon richtig. Aber trotzdem geht das nicht mit der Übertragung. Hat jemand noch nen Tipp woran es liegen kann?
-
Thread
Verzweifelung:Atmega über PonyProg beschreiben
(3) PORTD = 0xFF; // (4) DDRB = 0xFF; PORTB = 0xFF; DDRC = 0xFF; PORTC = 0xFF; while(1) { // (5a) /* "leere" Schleife*/ // (5b) } // (5c) /* wird nie erreicht */ return 0; // (6) } /[code
meinen AVR in seiner Blüte defloriere ... naja, das hat noch n bisschen Zeit, bis ich weiß, wie es geht :D 42m
-
Thread
Einfachere Schreibweise gesucht
ist soll Ausgang PC3 high werden. Und jeweils umgekehrt. Unten stehender Code funktioniert. Aber geht es nicht auch einfacher? Wie PC2 != PD6 [c] while(1) { if (PIND & (1<<PIND6)) { PORTC &= ~(1<<PC2); //Setzt PC2 1 } else { PORTC = PORTC | (1<<PC2
Yalu X. schrieb im Beitrag #2160446: > Noch richtiger ist > > [c] > PORTC = PORTC & 0xF3 | (PIND & 0xC0)>>4; > [/c] > Die Aufgabenstellung war, daß der Port auf High geht, wenn der Ausgang auf Low geht, die Lösung ist binär gesehen also FALSE :-)
-
Thread
Signalauswertung Empfänger (Modellbau)
if(impuls < 47) // Vergleichswert für 1,5ms bei 8MHz und TimerPrescaler 256 PORTC = ~0x00; else PORTC = ~0x01; signalEnd = 0; sei(); } } } [/c] Zur Funktion: Eigentlich ist die Geschichte recht simpel und wird
signalLength = (signal_2nd - signal_1st); if(signalLength < 6) { PORTC = 0xFE; } else { PORTC = 0xFF; } TCCR1B ^= (1<<ICES1); // Capture-Flanke umschalten setMode = 0; // Modus "steigende Flanke
-
Thread
AVR asm - Befehl nur jedes 2. mal ausführen
sbi DDRB,1 ; dito B1 cbi PORTB,1 sbi DDRB,2 ; ... cbi PORTB,2 sbi DDRC,0 cbi PORTC,0 sbi DDRC,1 cbi PORTC,1 sbi DDRC,2 cbi PORTC,2 sbi DDRC,3 cbi PORTC,3 sbi DDRC,4 cbi PORTC,4 sbi DDRC,5 ; rote LED cbi PORTC,5 sbi DDRB,3 ; dito cbi
cbi PORTB,0 ; alle LEDs löschen cbi PORTB,1 cbi PORTB,2 cbi PORTC,0 cbi PORTC,1 cbi PORTC,2 cbi PORTC,3 cbi PORTC,4 cbi PORTC,5 cbi PORTB,3 cpi r16, 1 ; Konstante vergleichen: 61+1=62, ergo jetzt 6300
-
Thread
Probleme mit Motor an Atmega8/PWM
PORTC = 0b00000000; //PORTC = 0x40; //Daten ausgeben (1=Strom auf Pin, 0= kein Strom auf Pin) //PORTC = 0x40; //Hex-Schreibweise //PORTC = 0b01000000; //binär-Schreibweise //PORTC |= (1<<PC6); //Einzel-Bitmanipulation //PORTC &= ~(1<<PC5); //LED einschalten //PORTC |= (1<<PC5); //LED ausschalten DDRD = 0x00;
-
Thread
Problem bei Projekt LED cube 8x8x8 myC und Decoder will nicht
FYI http://www.mikrocontroller.net/articles/LED_cube Glättung/Blockung oh ha, jetzt gehts los... M.
einfällt bitte unbedingt schreiben wir sind recht gespannt darauf aber heute muss was leuchten sonst geht mein Chef durch die Decke
-
Thread
Ringpuffer mit ADC Werten füllen und versetzt ausgeben
aber entweder den kompletten Code zu zeigen oder die Fehlermeldungen zu nennen, schreibst Du nur "Geht nicht". So können wir Dir nicht helfen.
// Port A.5 //uin=uin; // Kontroll LED //if(uin > 500) // PORTC=0xFF; //else // PORTC=0x00; static unsigned char ringbuffer[ 40 ]; static unsigned short getindex = 0; static unsigned short putindex = 0; static unsigned
-
Thread
Finde Fehler nicht !
of yellow LED { // if OFF PORTC |= (1<<PC1); // yellow LED ON _delay_ms(100); } else { // if ON PORTC &= ~(1<<PC1); // yellow LED OFF _delay_ms(100); } break; /* case 3: _delay_ms(20); if ((PINC & (1<<PC2))==0 )
--------------------------------------------------------*/ // pushbutton on PORTB 1 // LED on PORTC 0 #include <avr/io.h> #include <util/delay.h> int main (void) { DDRC &= ~(1<<DDC1); // set PORTC1 for input other keep unchanged DDRC |= (1<<DDC0); // set PORTC0 as OUTPUT for LED
-
Thread
Hygrosens HYT221 an Atmega8 macht nichts
da jemand eine Idee woran das liegen könnte? Ich nutze den MSP430F2112. Edit: Die Übertragung geht bis zum ACK (also Adresse erkannt) und dann bleibt SDA auf Masse. Viele Grüße Frank
1 // SDA Port C, Pin 1 #define SCL 0 // SCL Port C, Pin 0 #define SDA_PORT PORTC // SDA Port C #define SCL_PORT PORTC // SCL Port C - Programm [c] #define F_CPU 1000000UL // MP-Takt #include "PF/i2cmaster.h" #include <avr/io.h
-
Thread
Register von uCs Gesperrt
zumindest hab ich es daraus nicht erlesen, darum fragte ich vorsichtshalber nach, bevor da was kaputt geht.
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
UART mit Logik schalten
des UART Atmega). Die TX-Leitung des UART Atmega geht auf ext. int1 des Logik Atmega, und wenn da die Freigabe vorhanden ist, geht es über ein Pin zum MAX232 raus?
RS232) und PINC2(Atmega 2/2) high sind tue was { PORTC |= (1<<PC5); //setze PC5 high } PORTC &= ~(1<<PC5); //setze PC5 low } return 0; } [/c]
-
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
vusb Probleme - allerdings nur auf PCB
kann ich leider erst morgen da ich hier grad keine teile habe... aber warum geht es dann auf dem board auch ohne c's?
io.h> int main(void){ DDRC = _BV(PC0) | _BV(PC1); while(1){ PORTC |= _BV(PC0); _delay_ms(100); PORTC ^= ~_BV(PC0); _delay_ms(100); PORTC |= _BV(PC1); _delay_ms(100);
-
Thread
STM32 Eclipse Entwicklungsumgebung
Wieso soll er jetzt Eclipse weg werfen, wenn alles geht???
Halten wir fest: Geht nicht mit Eclipse/OpenOCD/Yagarto: - Amontec JTAG Key Geht: - Olimex ARM-USB-OCD, nur mit Treiber von OpenOCD - Segger J-Link mit GDB Server von Segger
-
Thread
Grundsätzliches zum Atmega256
ISP über MISO MOSI & Co > oder gibt es da Unterschiede oder Zusätze, die ich beachten muss? Das geht da nicht, da werden die UART-Pins verwendet.
> schließ den an die Platine (Mikrocontroller) an. Aber wie aufwendig wird > das wohl...? Das geht nicht, aber eine SD-Card lässt sich leicht auslesen und am PC beschreiben. Ein Dateisystem braucht es da nicht unbedingt.
-
Thread
MCP2515 Interrupt beim Empfang löschen
.7 = Output Config Portb.0 = Output Config Portb.1 = Output Config Portb.2 = Output Config Portc.0 = Output Config Portc.1 = Output Config Portc.2 = Output Config Portc.3 = Output Config Portc.4 = Output Config Portc.5 = Output Config Spi = Hard , Data Order = Msb , Master = Yes
.7 = Output Config Portb.0 = Output Config Portb.1 = Output Config Portb.2 = Output Config Portc.0 = Output Config Portc.1 = Output Config Portc.2 = Output Config Portc.3 = Output Config Portc.4 = Output Config Portc.5 = Output Config Spi = Hard , Data Order = Msb , Master = Yes
-
Thread
Atmega 32 Timer0 will nicht
] TCCR0 |= (1<<WGM01) | (1<<CS00); TIMSK |= (1<<OCIE0); OCR0 = 15;[/c] Aber irgendwie geht er immer noch nciht in die ISR. Interrupts global sind an.
setzte. Ich bekomme keinen Impuls kürzer als 2µs hin. In der ISR schalte ich nur einen Pin um: [c]PORTC ^= (1<<PC7);[/c].
-
Thread
UART, RS232 Soundmodul
{ DDRD=0xff; DDRB = (1<<PB1); DDRC = 0b11111100; PORTD=0b10111111; PORTC = (1<<PC1) | (1<<PC0); sei(); // Interrupts für Servotests, Code ausgeblendet sekunden = 0; msekunden = 0; setup_uart(); while(1) { if
du gehst vom AVR-TX an den RX-Pin an einer Dsub9-Buchse? Das geht so nicht, da muss noch eine Pegelwandlung, mindestens ein Inverter dazwischen. Einzelner PNP Transistor mit Emitter an +5V, AVR-TX über sagen wir mal 10kΩ an die Basis, Kollektor über 1kΩ an Masse oder
-
Thread
Outreg aus gemischten Port Pins
uint16_t)PORTB);PORTB = outreg; > MixPins = (outreg >> 8); > Danke und Gruss > Firebird Das geht natürlich nicht! Ich denke ich habs jetzt verstanden, PORTC und PORTD haben je ein 8 Bit register; die einzelnen Pins der jeweiligen Ports kann man nicht kombinieren. Ok, jetzt weiss ich nicht weiter
outreg; > outreg = outreg >> 8; > PORTD = PORTD | 0xFC; > PORTC = PORTC | 0x03;[/c] > > Jetzt müsste es nach meinem Kenntnisstand stimmen. > Mache ich ein Durcheinander? Kurze Zwischenfrage: Wie genau geht denn jetzt bei dir der Wert von outreg in das ein
-
Thread
Merkwürdiges Verhalten bei Bitmanipulation
merkwürdiges aufgefallen, als ich versuchte, die > Bits einer uint64_t Variable zu manipulieren: Geht's mit einer 32-Bit Variablen?
: MESSAGE: attach: IO Reg 'DDRC' at 0x0034: ref = 0x0033 devsupp.c:316: MESSAGE: attach: IO Reg 'PORTC' at 0x0035: ref = 0x0033 devsupp.c:332: MESSAGE: attach: IO Reg 'PINB' at 0x0036: created devsupp.c:316: MESSAGE: attach: IO Reg 'DDRB' at 0x0037: ref = 0x0036 devsupp.c:316: MESSAGE: attach: IO
-
Thread
Eingangsport auslesen und in den Ausgang(port) schreiben
, r24 ; schreiben wir nach PortC und schon geht es...
machen: label: IN R24, PINB ; die Bits vom PortB ins allgemeine Register R24 OUT PORTC, r24 ; schreiben wir nach PortC rjmp label ; Sprung nach label Wobei 'label' ein Bezeichner deiner Wahl ist. MfG Spess
-
Thread
WINAVR Portpins setzen
Compiler aus genau dem Grunde nicht sbi anwendet, weil der Befehl nur mit I/O-Adressen unterhalb 0x20 geht. Als nächstes fragst Du, warum aber sbi 0x1b,6 geht. Nun, 0x1B ist eine Zahl _kleiner_ als 0x20. Vorbeugend möchte ich mitteilen, das dies auch für die Zahlen 0x0, 0x01, 0x02, usw. bis 0x1A, und
@Peter (Gast) Versuch einfach mal, ein kleines Beispielprogramm zu erstellen, welches mit IAR geht, aber mit AVR-GCC nicht. Dann kann man ganz schnell erkennen, wo das Problem liegt. Peter
-
Thread
Problem mit RGB-LED-Fader Atmega8
mit Assembler und AVRs angefangen. Gerade versuche ich mit PWM einen RGB-Fader zu programmieren, geht auch schon recht gut. Allerdings springt er nicht erst aus den Routinen wenn ocr_X = 00 ist sonder schon bei recht zufälligen Werten bei rot zbsp: schon bei 242. Wahrscheinlich habe ich einen ganz
; Die neue Bitbelegung am Port ausgeben andi temp, 0b00000111 out PORTC, temp reti pause: ; ============================= ; Warteschleifen-Generator ; 20000 Zyklen: ; ----------------------------- ; warte 19998 Zyklen: ldi R21,
-
Thread
Mit Watchdogreset zum Bootloader springen
value = pgm_read_byte(&font[data[digit]]); //Alle Segmente auschalten PORTD |= PD2_7; PORTC |= 1 << PC3; //Backplane wechseln PORTB &= ~PB0_1; PORTB |= digit2; //Segmente setzen PORTD &= (~(value & 0b00111111)) << 2; PORTC &= (~(value & 0b01000000)) >> 3; }
denk einfach mal ein bisschen nach, du findest genügend szenarien, mit denen solches gemurkse schief 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
if Abfrage in main() ignoriert?
Testzwecken schaltet man mal da mal da ein LED ein oder aus. Funktioniert auch alles so weit. Es geht um die Anweisung. Ich weiß ein wenig aus dem Zusammenhang gerissen, der restl. Code befindet sich im Anhang. Es handelt sich um die Zeile. [c]if(Second==5) PORTC ^= (1<<PC1);[/c] Das komische
static uint8_t _20_ms=0; _20_ms++; if (_20_ms == 50) { Second++; _20_ms = 0; PORTC ^= (1<<PC0); } } [/c] Du setzt jedes mal wenn du in die ISR kommst deinen Wert von _20_ms auf Null. Dann geht er ja schon nie in die if Abfrage in deiner ISR. Wie sollte dann Second jemals
-
Thread
Problem beim Empfang mit ATMEGA8 über UART
die Formel keinen Fehler hat. Ansonsten hätte ich gesagt, Debugger dran und Register prüfen . Das geht aber bei mega8 nicht. Er hat kein OCDS. 2. Laß eine LED ggf. eine weitere blitzen, wenn der Interrupt aufgerufen wird. Dann weißt Du, dass zumindest der Empfang funktioniert. 3. Welche Sinn
programmiert wird) dazwischen funken. Dann machst Du folgendes: DDRC = 0x3F; DDRD |= 0xC0; PORTC = nextChar; (Bits 0 bis 5 UDR) PORTD = (nextChar & 0xC0); (Bits 6 und 7 des UDR) Jetzt hättest Du die Möglichkeit die Registerinhalte in Kombination mit der Warteschleife zu überprüfen. Prinzipiell
-
Thread
Verständnisproblem bei Timer 1 ATMEGA32
0xFF,0x1FF, 0x3FF oder eben 0xFFFF) 0xFFFF fest als Topwert gibt es nur im Normalmode. Für PWM geht das nur über OCR1A oder ICR1. MfG Spess
So, hier ein Beispiel: [C] SIGNAL(SIG_OUTPUT_COMPARE1B) { PORTC++; } int main (void) { DDRC = 0xff; // Port C Ausgang PORTC = 0x00; // Port auf Null DDRD = 0xff; // PORT D ist Ausgang PORTD = 0x00;
-
Thread
PWM Signal auf Dauersignal umwandeln
Sleep-Modi wichtig, weil dann bestimmte Taktsignale, je nach Modus, nicht mehr erzeugt werden. Es geht hier also darum, das Flankeninterrupts nur bei vorhandenem I/O-Takt, also bei bestimmten Sleep Modi funktionieren. Die Ursache hat mit dem Mechanismus für die Erkennung von Flanken zu tun. Dieser
als WK-IN-LED + // PD6 als WK-IN-LED - // PD7 als WK-OUT-LED + // Betriebs-LED einschalten PORTC |= (1<<PC5); // WK-OUT deaktivieren (Aus, wenn High) PORTD |= (1<<PD4); // Auf wechselnde Flanke an INT0 reagieren MCUCR &= ~(1<<ISC01); MCUCR |= (1<<ISC00); // Externen Interrupt
-
Thread
Probleme bei Programmierung von Lichtschranken-Stoppuhr
;zähler erhöhen reti anzeige2: cpi zaehler, 2 brsh anzeige3 out PORTC, ausschalten lds temp, Seg_Code2 out PORTD, temp lsl schalter out PORTC, schalter inc zaehler reti anzeige3: cpi zaehler, 3 brsh anzeige4 out PORTC
PORTC, schalter inc zaehler reti anzeige5: out PORTC, ausschalten lds temp, Seg_Code5 out PORTD ,temp lsl schalter out PORTC, schalter clr zaehler clr