-
Thread
Atmega8L: Warum geht Timer0 Interrupt nicht?
Hallo zusammen, ich habe 2 Testprogramme für euch. Das erste läuft wie erwartet. Hier wird TIMER0_OVF über TIFR abgefragt. Beim zweiten wird in der ISR toggle=1 gesetzt, als Indikator für eine ausgeführte ISR. Makefile ist in beiden Fällen gleich und setzt atmega8 als uC. Hardware Plattform STK500. Meine Rechereche hat einen sehr ähnlichen Fall herausgebracht. http://www.mikrocontroller.net/topic/174886 Leider wurde dem Fragesteller dort nicht geholfen. Alle Quellen nachfolgend gelistet. Zuerst Makefile (Cygwin Umgebung) [pre] gcc = avr-gcc objcopy = avr-objcopy inc =
-
Thread
AVR-GCC 7-Segment Multiplex Problem
0; } ISR(TIMER1_OVF_vect){ if(PORTD == *c1) PORTD = *c0; else PORTD = *c1; PORTC ^= (1 << PC0); PORTC ^= (1 << PC1); } [/c]
#2664699: > Was nicht richtig funktioniert, ist das Zählen. [c] #define SEVENSEG_DEACTIVATE() PORTC|=((1 << PC0)|(1<<PC1)) #define SEVENSEG_ACTIVATE_ONES() PORTC&=~(1 << PC0) #define SEVENSEG_ACTIVATE_TENS() PORTC&=~(1 << PC1) //eine Funktion, die eine uint8_t zahl nimmt und //diese auf dem
-
Thread
Mehrere Ausgänge über Alias zuasmmenfügen
Guten Morgen, Ich würde gerne über einen Alias mehrer Ausgänge zusammenfügen.. Geht das so? $regfile = "m1284def.dat" $Crystal=4000000 $hwstack=40 $swstack=16 $framesize=32 Dim Zaehler As Word Config Porta = Output Config Portb = Output Config Portc = Output Config
D3 Alias Porta.3 E1 Alias Porta.4 E2 Alias Porta.5 E3 Alias Porta.6 F1 Alias Porta.7 F2 Alias Portc.7 F3 Alias Portc.6 G1 Alias Portc.5 G2 Alias Portc.4 G3 Alias Portc.3 H1 Alias Portc.2 H2 Alias Portc.1 H3 Alias Portc.0 I1 Alias Portd.7 I2 Alias Portd.6 I3 Alias Portd.5 Farbe1 Alias
-
Thread
ATmega8 läuft um den Faktor 10 zu langsam
>doch macht es. >PORTC ^= (1<<0); Nein. XOR ist immer: IN Rxx, PORTC EOR Rxx, 0x01 OUT PORTC, Rxx JMP zurück Aber das sollte man im ASM-Listing erkennen. Da kann man zählen. Diese vier Befehle sollten acht
tust. Dieser syntaktisch wunderschön aufgedonnerte Bullshit: > while(1) > { > PORTC ^= (1<<0); > } wird vom Compiler (ohne Optimierung) nämlich (bestenfalls) etwa so ausgedrückt: loop: in reg1,PORTC ;1 ldi reg2,1<<0 ;1 eor reg1,reg2 ;1 out PORTC,reg1
-
Thread
Atmega48 UART sendet bei TX Abschaltung ein ungültiges Zeichen
Da ich für Inputs (Taster) nur PROTC nutze, wird auch nur dieser von mir konfiguriert. .equ PORTC_DDRC = 0b00001001 ; DDRC (Richtungsregister, 1=Output, 0=Input) .equ PORTC_PORTC = 0b00000000 ; Alle Bits an PORTC0 ausschalten ldi Tmp, PORTC_DDRC ; DDRC (Richtungsregister) setzen out DDRC, Tmp ldi Tmp, PORTC_PORTC ; Bits und Pullup-Widerstände setzen out PORTC, Tmp @Alle anderen: Hmm, nun wenn das Abschalten des TX nicht Usus ist, dann ist das ja in Ordnung. Ich kenne den genauen
-
Thread
case-Anweisung
Eingänge DDRC &= ~(1<<DDC3); DDRD &= ~(1<<DDD6); //Setzen der Pull-Ups der Eingänge PORTC = (1<<PC3); PORTD = (1<<PD6); //Setzen der Ausgangszustände PORTB |= (1<<PB0) | (1<<PB1); PORTC |= (1<<PC5); } [/c]
@AK Warum einfach, wenn es auch schwierig geht? Schönes Motto du da hast.
-
Thread
Wie External SRAM mit GCC Optimierung ansteuern?
Probier's mal so herum: [pre] PORTC &= 0b00001111; PORTC |= (MemLowAdr << 4); asm volatile ("nop"); [/pre] oder besser gleich [pre] PORTC = (PORTC & 0b00001111) | (MemLowAdr << 4); asm volatile ("nop"); [/pre]
PORTC &= 0b00001111; // KonfigByte anlegen PORTD = ((MemQuart | (1 << CUSPtoDRDY))); //Wahl des Quartals, CUSP aus, WRITE = Low PORTD &= ~(1 << PD3); PORTC |= (MemKonfigAdr << 4); PORTC &
-
Thread
Anfängerfrage zu Assembler
programm noch ein wenig abgeändert, geht aber immer noch nicht. sobald ich den portc im programm auf high setze funzt es. [avrasm] $regfile = "m8def.dat" $asm Loop: ldi r16, 255 Out Ddrb , R16 ldi
0 Out Ddrc , R17 Test: ldi r16, 1 Out Portb , R16 in r17, PINC Out Portc , R17 cp r16, r17 breq Main rjmp Test Main: ldi r18, 255 Out Portb , R18 rjmp Test $end Asm [/avrasm] geht aber immer noch nicht. muss aber dazu erwähnen das
-
Thread
AVR Einstieg
nachschaun den du benutzt. wenn du z.b den adc am mega8 benutzten willst schaust du nach wo der ist. portc. du willst den eingang 0 an portc.0 benutzten, dann schaust du im stk user guide nach wo der portpin ist: an portc pin1 (links oben).
sorry ich raffs nich. woran sieht man dass der atmega8 am portc connected is? overview - blockdiagram? da steht ja was von portc und portb dabei is portc eher in relation zum adc... is damit der portc vom stk500 gemeint?
-
Thread
Atmega16 PortD
Entweder der Controller ist im Arsch oder die Verbindung die unter dem Controller zu VCC geht ist nicht in Ordnung. Wie hoch sind die Spannungen an PORTB, PORTC?
Martin B. schrieb im Beitrag #3711488: > Wenn jemand sagt wie und ob > es geht, werde ich selbstverständlich die Bilder aus dem ersten Post > noch nacheditieren. a) geht nicht b) haben die Mods das schon erledigt. Das soll aber keine Entschuldigung fürs nächste mal sein
-
Thread
Atmega8 PORTB
Suche mal den Artikel zum Thema "Tastenentprellung". Das steht, wie es geht.
einem Port-Ausgangspin nicht auch nachsehen darf, wie der Ausgangspinn gerade steht [c] if( PORTC & ( 1 << PC1 ) ) // steht der Pin auf 1? PORTC &= ~( 1 << PC1 ); // -> ja tut er. auf 0 schalten else PORTC |= ( 1 << PC1 ); // -> nein, tut er nicht. auf 1 schalten
-
Thread
7 Segmentanzeige falsch eingekauft, reagiert nur auf low.
nicht, ich sehe auf beiden nichts vernünfiges. Hier das Programm: ldi r22, 0b00000001 out PORTC, r22 ldi r21, 0b00000001 out PORTB,r21 ldi r22, 0b00000000 out PORTC, r22 ldi r21, 0b00000100 out PORTB,r21 rjmp loop
sbi DDRB,0 sbi DDRB,1 sbi DDRB,2 sbi DDRB,3 sbi DDRC, 0 loop: ldi r22, 0b00000001 out PORTC, r22 ldi r21, 0b00000001 out PORTB,r21 ldi r22, 0b00000000 out PORTC, r22 ldi r21, 0b00000100 out PORTB,r21 rjmp loop
-
Thread
ATMEGA16 läuft nicht
(Ausgänge) DDRC ist 0xFF (ebenfalls) PORTA ist 0b10101010 (4 sollten auf alle Fälle leuchten) PORTC ist 0b00000010 (linke 7segment anzeige. PORTC.1 = 5V) LEDs in 7segment anzeige sind siehe oben über einen Puffer und Vorwiederstand an Vcc.
OK. die Ports funktionieren einzeln (PORTD,PORTC,PORTB), aber für PortA kriege ich kein genaues ergebnis. (Sprich : der Oszillator geht auch.)
-
Thread
ATmega16 oder ATmega32 und ACRISP mk II programmieren?
auf High... das funktioniert doch bei PC3,4 und 5 hab ich das auch getestet und da geht es nicht? Gibt es dafür eine erklärung? [code] $regfile = "m32def.dat" $framesize = 32 $swstack = 32 $hwstack = 32 $crystal = 16000000 $baud = 9600 Config Portc.0 = Output Config Portc.1 = Output Config Portc.2 = Output Config Portc.3 = Output Config Portc.4 = Output Do Portc.0 = 1 Portc.1 = 1 Portc.2 = 1 Portc.3 = 1 Portc.4 = 1 Loop End [/code] mfg Flow
-
Thread
C code UART Atmega und Optimierung
case 'C': PORTC |= ( 1 << PB2 ); break; case 'c': PORTC &= ~( 1 << PB2 ); break; case 'D': PORTC |= ( 1 << PB3 ); break; case 'd': PORTC &= ~( 1 << PB3 ); break; case 'E': PORTC |= ( 1 << PB4 ); break; case 'e': PORTC &= ~( 1 << PB4 ); break; case 'F': PORTC |= ( 1 << PB5 ); break; case 'f': PORTC &= ~( 1 << PB5 ); break;
-
Thread
[AVR] Unerwarteter Compilerfehler mit constexpr
PORTH,&PORTH,&PORTD,&PORTD,&PORTD,&PORTD,&PORTA,&PORTA,&PORTA,&PORTA,&PORTA,&PORTA,&PORTA,&PORTA,&PORTC,&PORTC,&PORTC,&PORTC,&PORTC,&PORTC,&PORTC,&PORTC,&PORTD,&PORTG,&PORTG,&PORTG,&PORTL,&PORTL,&PORTL,&PORTL,&PORTL,&PORTL,&PORTL,&PORTL,&PORTB,&PORTB,&PORTB,&PORTB,&PORTF,&PORTF,&PORTF,&PORTF,&PORTF,&
dass es in einer neueren Kompilerversion mit gleichem ausgewählten c standard plötzlich nichtmehr geht, gibt es dort eigentlich nicht.
-
Thread
LED Cube programmieren
{ DDRC=0b0011111; //Port C Ausgänge: 0,1,2,3,4 while(1) { PORTC=0b0000001; _delay_ms(30); PORTC=0b0000011; _delay_ms(30); PORTC=0b0000111; _delay_ms(30); PORTC=0b0001111; _delay_ms(30); PORTC=0b0011111; _delay_ms
SPI_transfer(0b10101010); PORTB=0b0001000; //LATCH On-Off PORTB=0b0000000; PORTC=0b0000001; // Ebene 1-5 Werden angesteuert. _delay_ms(timeperiod); PORTC=0b0000010; _delay_ms(timeperiod); PORTC=0b0000100; _delay_ms(timeperiod); PORTC=0b0001000
-
Thread
Eingänge PORTC Probleme beim Atmega8
ende. weiß nich woran das liegt. ich habe eine tastatur(0 bis 9 und Stern und Raute) an PortB und PortC angeschlossen. PortB und PortC jeweils 6 Pins, also passt. nun aber das problem. die letzten 3 Pins also vom PortC kann ich nicht ansprechen! siehe programmcode... PortB klappt alles perfekt aber bei
es nicht zu tun. Die Sprache sieht es vor, und es vereinfacht manche Sachen erheblich. Natürlich geht es ohne, es geht aber auch ohne viele andere Sachen. Und ein break ist letztenendes auch nichts anderes. Ich will mit meiner Software keinen Schönheitspreis gewinnen, sie soll sicher funktionieren
-
Thread
Siebensegment Multiplexen in C
); // Zehnerstelle ausgeben PORTC = DIGIT_10; // Zehnerstelle einschalten _delay_ms(FREQ*4); // 2ms Warten PORTC = DIGIT_OFF; // SegmentAnzeige komplett ausschalten [/c]
ausgeben und den Zähler erhöhen, beim NÄCHSTEN Aufruf kommt dann das nächste Digit dran. Wenn Du PORTC 0xFF haben willst nimm statt PORTC |= 0xFF PORTC = oxFF, da sparst Du Dir das lesen des Ports, ausserdem reicht eine einfache Zuweisung PORTC = display[counter]; (Dir ist ja egal was vorher auf PORTCV
-
Thread
Garagentorsteuerung - Hörmannfunk nachrüsten
PINB4)) impuls=3; switch(impuls) { case 1://impuls=oeffnen PORTC |= (1<<PC4); PORTC &= ~(1<<PC5); break; case 3://impuls=schließen PORTC &= ~(1<<PC4); PORTC |= (1<<PC5); break; default: PINC=0x0;
Drahtbrücken spielen. Z.B. DDRC=0xff; DDRB=0x00; char Variable; for (;;){ Variable=PINB; PORTC=Variable; } Gibst Du jetzt auf Port B Pin 7 ein Signal, so sollte Port C Pin 7 diesen Status spiegeln. Oder so. Small is beautiful. So, jetzt geht's in die Heia.
-
Thread
Unerwünshcter Reset im Programm Mega 16
, aus out PORTC, an ;alles grün out PORTD, an nop call warten2 out PORTC, aus ;alles aus out PORTD, aus out PORTA, an ;alles orange out PORTB, an out PORTC, an out PORTD, an nop call warten2 out PORTA, aus ;alles aus out PORTB, aus out PORTC, aus out PORTD, aus ldi zaehlen, 0b00000000 main12
-
Thread
Atmel Studio 6 Erste Schritte: Debug / Watch
" verwendet wird: gleiches Bild Breakpoint auf "turns++" geht nicht.
1) > { > PORTC = turns; > turns++; > } > } > [/c] -> turns an PORTC zuweisen, turns inkrementieren.
-
Thread
Integer Variable Zerlegen
jede einzelne zifer dann weiss ich welscher port an und welscher aus muss aber weiss ja nicht ob das geht...
hochzählen oder? 1 10 11 100 101 110 111 usw... eben bínär jetzt habe ich 6 ports portc.0 bis portc.5 wenn test=1 portc.0=1 alles andere aus wenn test=10 dann portc.1=1 alles andere aus wenn test=11 dann portc.1=1 portc.0=1 usw... hoffe versteht was ich meine^^
-
Thread
Unbekanntes lcd Display
deiner Initialisierung fehlt er Befehl 'Entry Mode Set'. Kannst du mir vielleicht sagen wie das geht? bix schrieb im Beitrag #1761660: > Vermutung (2): > Lcd_data sollte als "Alias Portc" definiert werden Danke; hatte ich nicht beachtet (kommt davon wenn man Code nicht selber schreibt), aber
code] $regfile "m32def.dat" $crystal = 8000000 Config Lcd = 20 * 4 Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portd.6 , Rs = Portd.7 Config Lcdbus = 4 Cls Locate 1 , 1 Lcd "Hallo Welt" [/code] Bascom muss irgendetwas noch über die Datenleitungen
-
Thread
Port wechseln für LCD-Display
es gemacht und es ging leider nicht. JTAG hatte ich mit 2 x MCUCSR |= (1<<JTD); // JTAG (PORTC) abgeschaltet. Die Pins an PORTC sind danach schaltbar, habe es überprüft. PORTA bringt leider auch kein Ergebnis. Verdrahtung stimmt, PORTD geht ja. Noch eine Idee?
"Die Software verwendet in der lcd-routines.h den PORTD. Der Port ist bei mir belegt. Wollte auf PORTC, oder PORTA ausweichen. Habe in lcd-routines.h aus dem "D" jeweils ein "C" bzw. "A" gemacht (PORTD --> PORTC, DDRD --> " Und genau das sollte funktionieren. Warum es bei ihm nicht geht, weiß der
-
Thread
Interrupt springt nicht in die Serviceroutine MKL26z128
extern void PORTC_PORTD_IRQHandler(void); #endif //__ISR_H [/c]
Register gesetzt? ganz fies: wenn der NMI PIN als GPIO angeschlossen und FOPT falsch gesetzt ist, geht gar nix.
-
Thread
Problem mit dem überschreiben einer Variable
> PORTC = PORTC | (0 << PC1); Was wird da wohl rauskommen? Dein Nachholbedarf liegt beim Thema Bitmanipulation in C. Als Tipp: Probiers mal so PORTC = PORTC & ~(1 << PC1); > In der Simulation funktioniert
Lothar Miller schrieb: >> PORTC = PORTC | (0 << PC1); > Was wird da wohl rauskommen? > Dein Nachholbedarf liegt beim Thema Bitmanipulation in C. > > Als Tipp: > Probiers mal so PORTC = PORTC & ~(1 << PC1); > >> In der
-
Thread
Alptraum jedes Programmierer: Code kompilierbar aber doch ein Denkfehler drin wer sieht´s?
Neustart vom Programm, das geht durch Reset z.B. durch Unterspannung? Kaum vorstellbar...
gewöhn die ab besten gleich an: nur die Bits angreifen, die du auch wirklich ändern willst. [c] PORTC |= (1<<PC5); // Green LED on [/c] statt [c] PORTC = 0x20; // At no failure green LED is lightning from the 00100000 from the port C [/c] In Zeile 161 machst du das richtig: [c] PORTC
-
Thread
Entprellen..schon alles versucht..Atmega zu schnell?
Natürlich gehr es per Hardware. Die Flip-Flop Methode ist auch sicherlich die stabilste, aber es geht halt auch mit Software. Wenn man beim Kontaktprellen davon aus geht das jedes Prellen irgendwann mal zu Ende ist, dann kann man auch mit einem Mikroprozessor den Kontakt sicher "entprellen". Die
ein zu bauen stimmt etwas nicht mit dem Ablauf. Dann denke noch mal drüber nach wie es ohne Delay geht. Ich wette es geht immer ohne ...
-
Thread
8x8x3 RGB + PWM Multiplexen mit Mega32
kurz im Bsp zusammenfassend: LED (2|3|2) soll angesteuert werden (x-Richtung ist PORTB, y-Richtung PORTC und z-Richtung PORTD) dann würde ich jetzt die Ports folgendermaßen setzen: PORTB = 0x02; PORTC = 0x04; PORTD = 0x02; So das erstmal zu dem ansteuern der LEDs. Nun zum dimmen der LEDs.
jede LED nacheinander ansteuert, als Bsp (PWM erstmal außer Acht): //LED(1|1|1) PORTB = 0x01; PORTC = 0x01; PORTD = 0x01; //LED(1|2|1) PORTB = 0x01; PORTC = 0x02; PORTD = 0x01; //LED(1|3|1) PORTB = 0x01; PORTC = 0x03; PORTD = 0x01; //LED(1|4|1) PORTB = 0x01; PORTC = 0x03; PORTD = 0x01
-
Thread
Anzeige LCD-I2C / Multitasking und Tasterentprellung von Peter
schalten immer zusammen mit long { PORTC &= ~(1<<PC6); // LED an } if(get_key_long(1<<KEY_1)) // Lang schalten immer mit short { PORTC |= (1<<PC6); // LED aus } //////////////////////////////
Hallo Falk habe das Programm gleich getestet. Geht ohne Fehler und Warnung. Zusätzlich habe ich noch das eingebaut [c] if(get_key_press(1<<KEY_2)) // nur Taste press { // LED an PORTC &= ~(1<<PC5); anz
-
Thread
Interrupt mit Bascom wird doppelt ausgeführt
$regfile = "m48def.dat" 'compile for mega48 $crystal = 10000000 Config Portc = Output Config Portd = Input Config Portb = Input Portc = 0 Portb = 255 Portd = 255 'Pullups Declare Sub Inter On Int0 Inter On
interrupt routine Disable Int0 'prevent double triggering For C = 1 To 10 '100 images Portc.0 = 1 'set camera pin high Waitms 49 'wait a moment Portc.0 = 0 'set low Waitus 1000 'allow readout Next C
-
Thread
PWM und AD-Messung Assembler
******************************************************** ;## 7 Segmentanzeige #define A_SEG PORTC,0 #define B_SEG PORTC,1 #define C_SEG PORTC,2 #define D_SEG PORTC,3 #define E_SEG PORTC,4 #define F_SEG PORTC,5 #define G_SEG PORTA,4 #define DP_SEG PORTB,4 #define
robin schrieb im Beitrag #3973361: > Ich denke deinem Prof geht es in erster Linie um das effiziente > umrechnen der zahlen. Ich denke, hier geht es konkret darum, überhaupt erst mal irgendwie umzurechnen. Effizient kommt später. Lieber eine Lösung, die
-
Thread
Kein Rechteck am Ausgang
Hallo Michael, ... DDRC = 0x00; // Alles Ausgänge PORTC = 0x00; // Erst mal alles auf log "0" ziehen ... PORTC &= ~0x02; // log "0" PORTC |= 0x02; // log "1" ... Ich denke, dass müsste passen, oder? Gruß Ralf
" //... Hier geschieht etwas // Flanke am Ende der Funktion PORTC |= 0x02; // log "1" PORTC &= ~0x02; // log "0" } Gruß Ralf
-
Thread
RTC DS1307 mit Bascom konfigurieren und abfragen
die Portdefinitionen in den Quelltext einfügst: 'configure the scl and sda pins Config Sda = Portc.4 Config Scl = Portc.5 Interessanterweise geht es bei M644def.dat auch ohne. Das ist offenbar ein Tribut des letzten Bascom Updates. Seitdem die da nun auf "Teufel komm raus" den XMEGA mit einflechten
Sda = Portc.4 ' Scl = Portc.5 Config Twi = 100000 ' Init TWBR und TWSR 'Typical you need a speed of 400000Hz. Some devices will work on 100000Hz as well. ' TWI
-
Thread
Ports Splitten
Sollen natürlich Ausgänge sein! Also dann so: #define MYPORT ((PORTC & 0x20)<<8 | (PORTC & 0x10)<<7 | (PORTC & 0x08)<<6 | (PORTC & 0x04)<<5 | (PORTC & 0x02)<<4 | (PORTC & 0x01)<<3 | (PORTB & 0x20)<<2 | (PORTB & 0x10)<<1 | ) uint8_t test; MYPORT = test;
> also geht mein vorschlag nicht, oder? Ja, er geht nicht.
-
Thread
Port in 2 Byte aufteilen-Rechenoperation ausführen-Auf anderem Port ausgeben(Binär)
Also ich möchte einen PORT als 2 BCD eingänge verwenden (z.B. PORTC.0 PORTC.1 PORTC.2 PORTC.3 PORTC.4 PORTC.5 PORTC.6 PORTC.7 8 4 2 1 8 4 2 1 _____________________________ ___________
Robin Wenert schrieb im Beitrag #2705811: > (z.B. PORTC.0 PORTC.1 PORTC.2 PORTC.3 PORTC.4 PORTC.5 PORTC.6 > PORTC.7 > 8 4 2 1 8 4 2 > 1 ich kenne eher die "gespiegelte" Schreibweise, d.h. das
-
Thread
Timer1, CTC, Interrupt, REST, mega8, Problematik
Hab es probiert und es geht nicht.
Jetzt geht alles! Ich habe ständig das ELF anstatt des HEX-File geflasht! Vielen Dank an alle :-)
-
Thread
SNES Controller auslesen mit AVR Atmega88
/doc0856.pdf Da steht zB wie man ein einzelnes Bit einliest(BST). So wie Du es machen willst geht es, nur muss da der Rest von PORTC auch auf einen definierten Wert liegen. Dein Prinzip ist ja so: Wenn A gedrückt war solltest du zB 0b11111110 einlesen. Dann kannst du COM darauf anwenden damit es
)NES macht die Datem > vom Stecker selbst auslesen. Brauchst nicht aufschrauben. Die Leitung geht ja zum Stecker ;-D Zum Code würde ich mir mal genau aufschreiben, wie die Werte sind die anliegen. ZB wenn Du PORTC einliest: Hast du dann am Port 0x01 anliegen? Dann würde ich zuerst mal Testen
-
Thread
Hallo Welt macht nicht was es soll
{ _delay_ms(500); PORTC = PINC ^ (1 << 5); } } [/c]
bitteschön oben auch nur *irgendein* Eingangszustand abgefragt??? Es soll lediglich der aktuelle Stand von PORTC mit einem neuen Wert versehen werden, und das geht genau so wie Andre es geschrieben hat!
-
Thread
Anfänger - einfacher Aufbau mit LEDs und ATmega8 geht nicht
out DDRB, R16 ; PORTB 0-7 Pull-Ups aktivieren ldi R16, 0xFF out PORTB, R16 ; PORTC 0-7 Ausgang ldi R16, 0xFF out DDRC, R16 loop: in R17, PINB ; alt, geht nicht ; andi R17, 0b11111011 ; Wo steht die 0 ??? => PB2 manipulieren? ; Alternative1: PC1 toggeln durch
0b00000010 eor r17, r16 ; Alternative2: PC1 folgt PB1 ; andi R17, 0b00000010 out PORTC, R17 rjmp loop ; ENDE [/avrasm]
-
Thread
7-Segment-Anzeigen mit gemischten Ports
{ PORTB &= ~mask->portB; PORTB |= mask->portB; } if( mask->portC != 0 ) { PORTC &= ~mask->portC; PORTC |= mask->portC; } if( mask->portD != 0 ) { PORTD &= ~mask->portD; PORTD |= mask->portD; } } int main() { uint8_t e, z, h; ... for(
Einer von 9 bis 0, wie es sich gehört und stoppen. Ich verstehe es absolut nicht, wieso " >= " nicht geht.
-
Thread
Atmega8 + Uart + MK3
} break; case 'C': switch(z2) { case '0': sbi(PORTC,0); break; case '1': sbi(PORTC,1); break; case '2': sbi(PORTC,2); break; case '3': sbi(PORTC,3); break;
} break; case 'c': switch(z2) { case '0': cbi(PORTC,0); break; case '1': cbi(PORTC,1); break; case '2': cbi(PORTC,2); break; case '3': cbi(PORTC,3); break;
-
Thread
Bascom: atmega8-16pu verhält sich anders als atmega8-8pu
bit2,bit1 as integer Config PortB.0 = Input ' Decimal or Hex Mode '8 Bit Data Input Config Portc.5 = Input Config Portc.4 = Input Config Portc.3 = Input Config Portc.2 = Input Config Portc.1 = Input Config Portc.0 = Input Config PortB.2 = Input Config PortB.1 = Input Config Portd
> den Atmega16 mittels rjmp ?-? Es geht um den ATmega8.
-
Thread
Lauflicht mit Latches Übergangproblem
= 1 'LATCH Erste Modul enable Portb.0 = 1 Portb.1 = 1 Portc.5 = 1 Portc.4 = 1 Portc.3 = 1 Portc.2 = 1 Portc.1 = 0 Portd.6 = 0 Portd.7 = 0 Nur das funktioniert zwar, ist allerdings mit riesen Schreibaufwand verbunden Von daher, wie kann
Hi > Portb.0 = 1 > Portb.1 = 1 > Portc.5 = 1 > Portc.4 = 1 > Portc.3 = 1 > Portc.2 = 1 > Portc.1 = 0 Was soll das bewirken? MfG Spess
-
Thread
Software PWM mit Bascom
Integer Dim B As Integer Config Timer0 = Timer , Prescale = 64 On Timer0 Timer0_isr Config Portc = Output Portc = 255 B = 120 A = 0 Enable Timer0 Enable Interrupts Portc.1 = 0 Do Loop Timer0_isr: Incr A 'A eins hoch zählen If
'Wenn A 120 ist dann Portc.0 = 1 'Portc.0 aus A = 0 'A wieder nullen endif Return [/code] Ich weiß, das A nie die 200
-
Thread
AVR AtMega8 Preemtive Scheduler
ein Timer2 Cmp Match Interrupt, an dessen Ende ich dann zu "function1" springen will, um die LED an PORTC 4 anzumachen. Erstmal geht es mir nur darum, dort anzukommen. Hier der einzige Code mit dem ich es bisher geschaft habe, dass ich wenigstens im Sumulator in function1 komme: [code]#include <
/timer2 match interrupt enable TIFR |= 0b10000000; DDRC = 0b00110000;// set PORTC PIN 5 and 6 to output pt_function1 = &function1;//assign function adress to pointer sei();// enable interrupts main2: PORTC = 0b00100000; asm volatile("nop"); asm volatile("nop"); asm volatile
-
Thread
Mega16, Fusebits und Quarz Probleme.
Also der eine Controller geht doch noch war blos nicht richtig im Sockel.
* 4 Config Lcdpin = Pin , Db4 = Porta.4 , Db5 = Porta.3 , Db6 = Porta.1 , Db7 = Porta.0 , E = Portc.6 , Rs = Portc.5 Wait 1 Initlcd Wait 1 Cls Upperline Lcd "Dies ist die 1"
-
Thread
LED Lauflicht mit Fader Effeckt
Oh hab den Code vergessen :D [pre] Led_1 Alias Portc.0 Config Led_1 = Output Led_1 = 0 Led_2 Alias Portc.1 Config Led_2 = Output Led_2 = 0 Led_3 Alias Portc.2 Config Led_3 = Output Led_3 = 0 Dim Led_1_value As Byte Dim Led_2_value As
dat" $crystal = 16000000 $baud = 19200 $hwstack = 64 $swstack = 64 $framesize = 64 Config Portc = Output Config Timer0 = Timer , Prescale = 1 Enable Timer0 On Timer0 Timer0_isr 'Sternegruppen Gruppe1 Alias Portc.0 Gruppe2 Alias Portc.1 Gruppe3 Alias Portc.2 Gruppe4 Alias Portc.3
-
Thread
Platinen Belichter
energiesparlampen mit E27-gewinde. kosten beim hornbach 1,50 das stück. sieht dann so aus wie im anhang und geht wunderbar.
regfile = "m8def.dat" $crystal = 8000000 Config Lcd = 8 * 2 Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.5 , Rs = Portc.4 Cls 'loesche das LCD Display Locate 1 , 1 'Cursor auf 1 Zeile, 1 Spalte Lcd "Hello