-
Thread
Drehencoder auswerten
diff = last - new; // difference last - new if( diff & 1 ){ // bit 0 = value (1) last = new; // store new as next last enc_delta += (diff & 2) - 1; // bit 1 = direction (+/-) } } [/C] Wenn das Interrupt ausgelöst wird prüft
ob Pahse B aktiv ist und da hört es dann bei mir auf... :( Wieso, er kombiniert nur die beiden Bits aus 2 Eingängen zu einer einzelnen Zahl von 0 bis 3, damit die Zuordnung der Eingänge an den Encoder nicht die Bedeutung der Bits intern beeinflusst. Es ist korrekter code und ein korrektes Verfahren
-
Thread
LM3S9B96 SPI über GPIO
schreib opcode gefunden und zum lesen muss ich dann erst 3H senden und dann einfach nach daten abfragen, hab meinen code so umgestellt. bin mir nicht sicher ob es so in ordnung ist. Sind die CS richtig gesetzt oder soll alles in einem CS stattfinden. [c] SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC
:10004000FFFFFFFFFFFFAA9930A1000720003161E9 :1000500009EE33213C0F31A100C931412F0031C2DB :100060000222809330E1FFCF30C1008131810881CD :100070003201001F32C1000532E1000432A1000E3E :100080003261000032810000334118F23362000017 :10009000000030220000000030A10001506000028A
-
Thread
Meine Bewerbung bei Facebook
faellt da auch nichts dolles ein. for (iA=0;iA<size; iA++) for (iB=iA;iB<size; iB++) for (iC=iB;iC<size; iC++) if (iA+iB+iC == 0) return true; return false; O(n^2) glaube ich - ich sehe aber keine andere Moeglichkeit als das so dumm zu bruteforcen. Wie geht das mit dem Run Length
da auch nichts dolles ein. > > for (iA=0;iA<size; iA++) > for (iB=iA;iB<size; iB++) > for (iC=iB;iC<size; iC++) > if (iA+iB+iC == 0) return true; > return false; > > O(n^2) glaube ich - ich sehe aber keine andere Moeglichkeit als das so > dumm zu bruteforcen. Das ist die naive O(
-
Thread
China SUPER Bauteile-Schnäppchen Thread
die perfekte "Anzeige- und Bedieneinheit". Oder? Der Treiber IC "R61505" kann z.B. 9 Bits parallel, so dass man pro Pixel zwei Schreibzugriffe benötigt. Und ein 16-Bit µC kann mit _einem_ Befehl alle 9 Bits an den GPIOs anlegen, das sollte richtig fix gehen. Bei 65535 Farben reichen sogar 2 x 8 Bit, also wäre ein 8-Bit µC auch nicht von Nachteil. Datenblatt: http://read.pudn.com/downloads91/sourcecode/others/348230/e61505_103a.pdf
-
Thread
ADC to UART Problem C/C++
and Transmitter UCSR0B = (1<<TXEN0); //Einstellen des Frame-Formates auf 8data-, 1stop-bits UCSR0C = (0<<USBS0) | (1<<UCSZ00) | (1<<UCSZ01); } //Übergeben einzelner Zeichen des Strings void usart_sput(char *string) { while(*string) { usart_send(*string); string++
average; ++i ) result += ADC_Read( channel ); return (uint16_t)( result / average ); } [/c] Danke für eure Zeit. MfG Max
-
Thread
TTL Signal Verarbeitung
nur um eine Testfunktion, ob der Int0 überhaupt was tut. steht in Telegramm.h und wird in main.c eingebunden. [C] volatile uint8_t getBit; ISR(INT0_vect) { getBit = 1; } [/C] main.c [C] // Initialisierungen externen Interrupt des dig. Signals EIMSK |= (1<<INT0); // Maske für den
Abgesehen von dem was Stefan schon gesagt hat > digitales Signal(1200/2400 Baud) ankommt. Um die Bits in ein Byte zu > schreiben frage ich nach dem Interrupt Flag ab Aber sicher nicht so [C] if (INTF0 == 0) [/C] Wie fragt man denn ein Bit in einem Register ab? Ausserdem: Das Interrupt
-
Thread
Port einlesen und IF abfrage
stehst, solltest du dir abgewöhnen an einen Port als ganzes rundumschlagmässig etwas zuzuweisen. Ein einzelnes Bit setzen schreibt sich PORTA |= ( 1 << PA0 ); > > else > > {PORTA = 0<<PA0;} und da hättest du auch gleich PORTA = 0; schreiben können, denn genau das steht da. Ein einzelnes Bit löschen geht so PORTA &= ~( 1 << PA0 ); [[AVR-GCC-Tutorial]]
-
Thread
Bit in einem Byte setzen/rücksetzen (schnell und möglichst direkt) in c
[c] // Bit setzen: byte |= (1 << bit); // Bit löschen: byte &= ~(1 << bit); [/c]
Max G. schrieb im Beitrag #2822234: > Und das packt man dann am besten in ein Makro BIT_SET() oder so ähnlich. Warum nur? BIT_SET wäre für mich eine geeignete /Abfrage/: if (BIT_SET(x,y)) {} Wenn schon, dann sollte das Makro SET_BIT() heißen... Und weil das Makro auch eine ganze
-
Thread
Kurze Frage zum Entprellen
bitweise codiert ist, welche Taste gerade gedrückt ist. Im Entprellcode ist das hier die Stelle [C] i = key_state ^ ~KEY_PIN; [/C] an der die jetzt gerade gedrückten Tasten (in Form einer Abfrage des PIN Registers der Tasten) in die Entprellung eingehen. Bei dir kriegst du die gerade gedrückten Tasten nicht durch Abfrage des PIN Registers, sondern durch den Aufruf der Funktion. Also wirst du KEY_PIN ersetzen durch .... Aufpassen musst du jetzt nur darauf, ob aus der Funktion eine gedrückte Taste mit einem 1-Bit
-
Thread
Einzelne Bit's abfragen mit C
Guten Morgen Ich mache meine berufsausbildung zum Elektroniker in der Schweiz. In meiner Region ist es üblich, dass man in den ersten zwei Jahren nur Assembler Programmiert, was ich mittlerweile auch fast im Schlaf beherrsche. Eigentlich fangen wir mit C erst in ein paar Monaten an, aber mich reizt es schon jetzt ein bisschen damit anzufangen. Nun, gestern habe ich mir mal ein Buch geholt und gemerkt, dass es doch irgendwo eine Gewisse ähnlichkeit hat. Ich besitze ein Board mit einem PIC16F887, zum Programmieren verwende ich den MikroC PRO for PIC. Auf dem Board sind 8 Schalter (PORTA
-
Thread
Was ist Heap, was ist Stack?
Hallo, ich bin Einsteiger in Sachen µC. Was ist eigentlich mit STack und Heap gemeint? Ich kenne nur ROM und RAM (Flash). Festspeicher und Arbeitsspeicher. Vielen Dank Yussuf
Bronco schrieb im Beitrag #2819946: > Push und Pop auf dem Heap? Wieso nicht? [c] ... ptr = malloc( 500 ); strcpy( ptr, "push, pop" ); ... [/c]
-
Thread
STM32 USART2 wie mehrere bytes empfangen?
uint16 myint3 = 244; ... auf dem STM32 benutze ich momentan folgenden code zum empfangen einzelner bytes (uint16_t) [c] char ReceivedData = NULL; void main() { . . . while(1){ /* Wait until a byte is received */ while(USART_GetFlagStatus(USART2, USART_FLAG_RXNE) == RESET
IP-Schutz :) ... kein umständlich ausgedrückter code. Und wenn du schon ... dann bitte so: [c] for( int cnt = 0; cnt < 50; cnt++ ) //c99 { ... } [/c]
-
Thread
Taster enprellen aus Codesammlung
gelernt. Eine der Architekturen, die ich nie genutzt habe. Bin von 8051 gleich und schnell auf 16-Bit-Architekturen gewechselt (C166, eine ganz tolle Architektur) und nie mehr auf 8-Bit zurück. Zur Zeit arbeite ich mich in STM32 ein. Sieht vielversprechend aus. Es gibt halt fast keine Controller
ordentlich > dokumentierten Code schreibt. Es macht keinen richtigen Sinn, sechs Programmzeilen einzeln zu kommentieren, in denen nur Bits hin und hergeschubst werden. Aber sinnig wäre es, den Algorithmus oberhalb dieser Zeilen in einem größeren Textblock zu veranschaulichen und zu erklären. Solltest
-
Thread
Lagerverwaltung Part-DB V0.2.2
Hallo Torsten! Torsten C. schrieb im Beitrag #2814390: > Aber macht es denn Sinn, dass jeder einzelne Nutzer einen Webserver mit > PHP und Mysql Datenbank betreiben muß? Nein. Aber auch daran wir gearbeitet: Eine Multiuser-Version
angelegt und in phpMyAdmin den Bytecode davon angeschaut. Das Zeichen 'ä' sollte dem Bytecode 0xC3 0xA4 (UTF-8) bzw. 0xE4 (ISO-8859-1) entsprechen. Ergebnis mit HTTP Zeichensatz UTF-8: 0xC3 0x83 0xC2 0xA4 Ergebnis mit HTTP Zeichensatz ISO-8859-1: 0xC3 0xA4 Erklärung: Bei ISO-8859-1 wird das
-
Thread
Problem bei Tasterabfrage mit dem 74HC164
eine Variante die paar Striche in < 20kB unterzubringen ;) Zum Problem: am Besten zyklisch ein einzelnes Bit durch die Register schieben und gleich danach (vor dem nächsten schieben) die Rückmeldung abfragen.
hp-freund schrieb im Beitrag #2808785: > Zum Problem: > am Besten zyklisch ein einzelnes Bit durch die Register schieben und > gleich danach (vor dem nächsten schieben) die Rückmeldung abfragen. ganz viele 1 ("einsen") und nur eine "0" durchschieben. Dort, wo die "0" anliegt, kann
-
Thread
I2C im Bitbang-Mode über FT232H
ich bewußt nicht verwenden. Der FT232H steckt in einem fertigen USB-Kabel von FTDI drin (Typ C232HD-DDHSP-0), in welchem die Leitungen des in einigen Beispielen benutzten CBuses nicht herausgeführt sind. D. h. ich kann nur den DBus benutzen. Von diesem sind die einzelnen Pins über farbcodierte
während des ACK bei 1.8 V, was für ein Low definitv zu hoch ist. An der Reihenfolge, wann in den einzelnen I2C-Sequenzen welche Leitung auf High bzw. Low gesetzt wird, habe ich auch noch ein wenig rumgespielt; es kann gut sein, daß an der ein oder anderen Stelle hier softwareseitig auch noch ein Bug
-
Thread
8 Tasten einlesen (Möglichkeiten)
wenn mehrere Taster gedrückt sind, dann ist das Ergebnis sowieso unsinn. Es würde also reichen die einzelnen Bits zu kodieren.
mehrere Taster gedrückt sind, dann ist > das Ergebnis sowieso unsinn. Es würde also reichen die einzelnen Bits zu > kodieren. Stimmt. Es gibt keine Priorität, da ein Drücken von zwei Tasten gleichzeitig unsinn wäre.
-
Thread
CRC bei UART-Busprotokoll
gut. Ich habe euch hier erstmal nur den fehlerfreien Ablauf geschildert. Natuerlich habe ich noch Abfragen auf Zeitueberschreitungen, fehlende 'ACK' und Datenkollisionen drin. Somit kann ich auch eine Fehlerunterscheidung treffen und auf die einzelnen Fehler unterschiedlich reagieren. Ich moechte eine
Max C. schrieb im Beitrag #2813107: > Da ich vorallem > Sensordaten abfragen will, wuerde ich diese am liebsten mit einem > Zeitstempel versehen. CAN funktioniert i.d.R. so, daß die Teilnehmer nicht
-
Thread
Frage zum Fading von LED's
Auch dein PC hat nur einen Timer, und da blinkt und dreht sich auch alles. Irgendetwas auf deinem uC ist das Hauptprogramm, und irgendetwas anderes sind Interrupt-Routinen. Soft-PWM kann man sowohl im Hauptprogramm (synchronisiert sich durch Abfrage des aktuellen Timer-Standes) als auch in einer
sehe. Und dann gehts nach dem if einfach > weiter mit Menu - Abfrage und so weiter - stimmt eigentlich ganz > logisch. Genau., Der springende Punkt ist die Denkweise. Betrachte das Flag als Benachrichtigung: Es ist ein Ereignis eingetreten. Der µC testet
-
Thread
Spannung des Thermoelements verstärken
24bitter, mit zuschaltbarem Verstaerker. > Ist das nicht sehr teuer? ADS1118 (zwar "nur" ein 16-Bit ADC, dafür hat der interne Temperatursensor eine "Genauigkeit" von +-0.5 °C im Bereich von 0 °C - 70 °C) ~ 5 € bei Einzelstücken. MCP3424, 18-Bit, ~4 €, LTC2484, 24-Bit, interner Temp-Sensor, ~5 € und
Thermoelementen und wie diese gemessen werden können http://www.youtube.com/playlist?list=PL36A224E609F3F7C9
-
Thread
Schnelle Conversion bin2dec
Ich rate mal: C x 256 x 256 x 256 8 x 256 x 256 E x 256 8 liefert die Einzelergebnisse. Dann schlägt der Dezimaladdierer zu. Sowas konnten früher einige 8-Bit Prozessoren, wenn man sie auf BCD umgeschaltet hat
Ok, *JETZT* habe ich es: Du verwendest die einzelnen Bits des Vektors jeweils einzeln und multiplizierst Dir 32 Teilergebnisse in BCD-format hin. Das sieht dann offenbar so aus: 1) XXXX.XXXX.XXXX 2) + XXXX.XXXX.XXXX 3) + XXXX.XXXX.XXXX
-
Thread
AVR-Ports, Umgang mit unvollständiger Herausführung.
muß aber unbedingt ein Eingang werden. Natürlich gibt es passende Befehle dafür, um auch bei einzelnen Pins die Datenrichtung festzulegen und sie dann auch einzeln anzusteuern oder abzufragen. Was passiert aber, wenn man z. B. den Port A komplett abfragt, obwohl doch nur die ersten 3 Bit ein
Antworten. Ich habe es schon immer mit Assembler gemacht weil damit gut klarkomme und halt kein C kann oder brauche. Mit welchen Befehlen ich die Datenrichtung festlege und die Abfrage oder Eingabe für einzelne Pins machen muß, weiß ich. Das hätte ich vielleicht gleich deutlicher schreiben
-
Thread
Teilnehmer eines seriellen Bus abfragen
0b 0000 0000 0000 0000 Maske 0b 1000 0000 0000 0000 D.h. Die Angefragten vergleichen nur die Bits, welche in der Maske auf 1 stehen, damit macht man die Adressbereichsfilterung. Bei 16 Bit braucht man nur 32 Anfragen, um jeden einzelnen Teilnehmer zu finden. Macht 320ms, damit sollte man leben
Wenn das Protokoll diese Art der ABfrage nicht vorsieht, dann wird es auch nicht gehen. Was sagt denn die Spezifikation dazu?
-
Thread
Stoppuhr für ATmega16
ich das machen soll. Das ist doch ganz einfach: 1. Ein Timerinterrupt 1ms zählt z.B. eine 32Bit-Variable, ergibt max 49 Tage. 2. Zusätzlich zählt der Timerinterrupt ein Byte runter bis 0. Ist das Byte 0, wandelt das Main den 32Bit-Zähler in d,h,m,s,ms und stellt das dar. Die Bytevariable
mit Anzeige der kompletten Uhr zu groß ist, dann mach eben einen kleineren Schritt zuerst - eine einzelne Zahl. Wenn der immer noch zu groß ist, dann pfeif auf die Zahl und lass eine LED blinken.
-
Thread
Befehlszusammenfassung in C
, wenn ich [c] PORTB^=0x01; waitMs(1); PORTB^=0x01; waitMs(1); PORTB^=0x01; waitMs(1); PORTB^=0x01; waitMs(1); [/c] ungefähr 195 Mal wiederhole. Spätestens an diesem Punkt kann man feststellen, welche Ausmaße
Ganz einfach: [c] for (unsigned char i=0;i<195;i++{ PORTB ^= (1<<PB1); _delay_ms(1); } [/c] Ingo
-
Thread
Interrupt mittels Flag erkenne, kein jump an die Interrupt Vector Addr.
(1<<INT0) | (1<<INT1); //INT0 und INT1 aktivieren sei(); [/c] Das ich das EICRA beschreiben muss ist definitiv klar, aber muss ich auch die Bits im EIMSK setzen? oder bestimme ich damit das gesprungen wird? Ich möchte nur, dass das Flag gesetzt wird.
zu tun, sondern damit, dass man die Bits, die man nicht verändern möchte, auf 0 belässt, was beim Zusammensetzen von Registerwerten über OR automatisch geschieht. Klar, wer mit den Bit-Set/Bit-Clear-Assemblerbefehlen einzelne Bits anspricht
-
Thread
SNES Controller auslesen mit AVR Atmega88
Versehen und ist mir gerade gehörig peinlich... Jedenfalls wollte ich aber BUTTON nur mit dem einem Bit des Data-Anschlusses laden. Ich habe aber nicht gewusst, wie ich beim 8 Bit Register das least significant Bit mit nur einem Portbit legen kann (ich dachte erst an sbic/sbis, aber das hätte das Timing
kennst du wahrscheinlich eh: http://www.atmel.com/Images/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
-
Thread
erster Mikrocontroller programmieren -> fragen
vielleicht) später mit DMX Ausgang werden. Bis dahin muss ich aber noch viel Lernen was Bascom und µC betrifft.
Preis so niedrig halten wie es geht ;) > [...]oder steckst den µC direkt rein. Okay.
-
Thread
Max(a,b) möglichst effizient
h := b; end if; if (h>c) then m <= h; else m <= c; end if; end process; -- Macro Statistics -- # Comparators : 3 -- 32-bit comparator greater : 3 -- # Multiplexers : 1 -- 32-bit 4-to-1 multiplexer : 1 -- Maximum combinational path delay: 12.886ns -- Number of Slices 80 process (a,b,c) begin if (a>b) then if (a>c) then m <= a; else
-
Thread
ATMega88PA ADSC Bug?
if( c & 1 ) STX_PORT &= ~(1<<STX_BIT); // data bit 0 else STX_PORT |= 1<<STX_BIT; // data bit 1 or stop bit c >>= 1; } } [/c] Rudolph Riedel schrieb im Beitrag
Okay, laut Datenblatt kann man eine einzelne Konvertierung anschieben indem man entweder das PRADC Bit löscht oder das ADSC Bit setzt. Leider gibt es noch eine dritte Möglichkeit die ich überlesen habe, nämlich den µC in den IDle-Modus schlafen
-
Thread
Abfrage auf Null oder "Nicht"!?
nicht weißt: Atomar bedeutet, daß es für die CPU ein ununterbrechbarer Vorgang ist. Das sind z.B. einzelne Maschinen/Assembler-Befehle. C-Code wird vom C-Compiler in Maschinen-Code umgewandelt. D.h. ein C-Befehl ergibt oft in *mehrere* Maschinen-Befehle und ist damit nicht atomar! Bsp: 8-Bit Microcontroller macht [c] uint32_t x: x++; [/c] Das x++ erzeugt in vier Assembler-Befehle, weil die CPU pro Befehl nur jeweils 8 der 32Bit berechnen kann. So ist es ein sehr typischer Fehler, auf Variablen aus dem Interrupt
-
Thread
EleLa - Elektronik Lagerverwaltung ab V2.0
V2.2.13C07 kann mit der Versionsabfrage geladen werden. - Win32/64 - Linux32/64 - Hilfe-Datei - Updatebeschreibung - Windows Setup-Paket - Linux-ZIP 32/64 Bit - Feature: Nun wird bei "Prüfe Menge für
bevor man irgendwas drückt ;-) das Anklicken des 6.? Unterordners führt zum Absturz Elela V2.2.13C07-64 Windows 7 64Bit Visual Studio sagt mir: Unhandled exception at 0x00412084 in EleLa.exe: 0xC0000005: Access violation writing location 0x0000000000dc0ff0.
-
Thread
Sinuserzeugung in VHDL
((bit_lenght - 1) downto 0); variable mult_value : SIGNED(((bit_lenght * 2) - 1) downto 0); begin if (a.ip = 1 and c.ip = 1) then result_3.ip := 1; result_3.fp := bit_lenght
:= STD_LOGIC_VECTOR(SHIFT_LEFT(UNSIGNED(ergebnis), 1)); result_3.value := SIGNED(ergebnis((bit_lenght - 1) downto 0)); elsif (a.ip = c.ip) then result_3.ip := (a.ip + c.ip) - 1; result_3.fp := bit_lenght - (result_3.ip); result_3.nb := bit_lenght; mult_value
-
Thread
While Uart abfrage
adresse zum Master wie volgt: Slave sendet; uart_putc(40); Master empfang: i=0; while ( ( c2 = uart1_getc() ) != 0x28 && i < Len2 - 1 ) in[ i++ ] = c2; in[i] = '\0'; muss ich in der While != 0x28 das so abfragen oder While == 40 mfg
c2; in[i] = '\0'; ..... Ausgabe auf mein lcd bekomme ich nur die daten von adresse 41 angezeigt. spreche ich die svlaves nur einzeln an gehts.
-
Thread
Signal für eine gewisse Zeit setzen in C (8051)
im Hauptprogramm weiter. (der sollte daher möglichst kurz sein) Interrupts aktiviert man erstmal einzeln für jede Quelle, danach noch den Hauptschalter EA. [c]TMOD = 0x11; TH0 = (65536 - 1000)/256; // für Startwert TL0 = (65536 - 1000)%256; // für Startwert TR0 = 1; // Timer 0 starten -
Interrupt für Timer 0 aktivieren EA = 1; // Globalen Interrupt aktivieren -- ab jetzt geht's rund [/c] die Interrupt-Service-Routine ersetzt die if(TF0)-Abfrage aus dem Hauptprogramm. Ist kein Hexenwerk, es kommt nur ein Schlüsselwort und eine Nummer, die die Quelle angibt. [c]void ISR_Timer0 (void
-
Thread
ADC mit ATmega8A
Konvertierung warten return ADCH; // ADC auslesen und zurückgeben (8bit, ansonsten ADCW) }[/C]
überschreibst du alle anderen Einstellungen in ADMUX. ADMUX =~(1<<MUXn|...|1<<MUX0); // alle MUX-Bits löschen ADMUX |= mux; // MUX-Bits setzen Ich hoffe das stimmt so, da meine C-Kenntnisse etwas rudimentär sind. MfG Spess
-
Thread
Haussteuerung, Strommessung AC
Und der kostet gerade mal 3 Euro 50! http://www.schukat.com/schukat/pdf.nsf/index/E317DD3156863523C125731A00415F5C/$file/AC-102020Jun-06.pdf So-nun habe ich lt. Datenblatt also 20 A am Wandler und somit bei diesem speziellem damit einen Ausgang von 2V und 20 mA bei einem Lastwiderstand von 100 Ohm
von 10 kHz Wenn du schneller als 200 mal pro Sekunde abfragst schon, wenn du langsamer bist ist der MIttelwert jedoch 0. Eigentlich brauchst du einen schnelle Präzisionsgleichrichter vorweg, http://sound.westhost.com/appnotes/an001.htm (Die Massezeichen
-
Thread
Signalerkennung
:) karl heinz, genau das wollte ich sagen. da ich aber mit dem befehl bit_is_clear arbeite steht da ja dann eine 1 an! wie kann ich also nur die flanke abfragen? in der sps technik gibts dafür flankenmerker, impulsmerker, p-boxen etc.... hat der µC auch sowas?
Mensch, dass man die Pins einzeln abfragen muss. Man kann auch den kompletten PINB hernehmen und alle nicht interessierenden Bits wegmaskieren (gezielt auf 0 setzen). Dann bleiben Zahlen (weil es ja 3 Bits sind) im Bereich 0 bis 7
-
Thread
Array zuweisen
gelesen if(temp>10) //hier wird der wert verarbeitet { setzte bits in einem register } } } [/C] Da stimmt etwas grundlegendes nicht: 1. Deine "muster1" und "muster1" sind 2-dimensionale 16x16er Arrays. In der Funktion "soft_PWM" liest Du aber ein
Startposition angebe und dann durch das wissen von der Zeilenlänge und der anzahl von reihen die einzelnen elemente abfragen kann. Oder ist es nicht möglich die Startadresse von 2 dimensionalen arrays zu übergeben? > >> in der MAIN weise ich dann dem Pointer die Anfangsadresse meines Arrys >> zu
-
Thread
Arduino + 74HC165
74HC_HCT595.pdf Der hat extra ein Eingangsregister. Mit einem Extrapuls kopiert man dann die alle 8bit auf einen Schlag zum Ausgangsregister.
Seriell-rein-Parallel-raus. Ich würde für Eingänge schon auf den HC165 setzen. Ausnahme ist so was wie ein Tastenfeld abfragen, das ginge mit geschickter Beschaltung auch mit HC595.
-
Thread
Keil C51 auf SDCC portieren -> optimieren
Schleife in der ich die PWM-Kanäle durchlaufe, sondern der Inhalt, wobei das eigentlich nur if-Abfragen sind, in denen in Abhängigkeit der Einstellungen für die Kanäle eben das entsprechende Bit gesetzt wird. @Matthias K.: > SDCC kann mit C51 Keil weder in Codegröße noch in Geschwindigkeit > mithalten
dort die Bits entsprechend dem was man sonst im Code an Portbits setzt, oder man beisst in den sauren Apfel und testet halt die einzelnen Bits der fertigen PWM Bytes und setzt/löscht dann die Portbits entsprechend
-
Thread
I²C Problem: verlorene Bytes
einleiten WriteI2CHostRegister (HostControl, 0xff50); // senden ResetSI (); // Status abfragen *I2CSTAT = ReadI2CHostRegister(HostStatus) & 0xff; // return I2CSTAT; }[/c]
einleiten WriteI2CHostRegister (HostControl, 0xff50); // senden ResetSI (); // Status abfragen *I2CSTAT = ReadI2CHostRegister(HostStatus) & 0xff; // return I2CSTAT; [/c]
-
Thread
Tastenverriegelung (Tastensperre)
weisen... > > BTW: warum sind die Taster an Analogeingängen angeschlossen? Hallo, den C-Code habe ich als Anhang hinzugefügt. Die Tasten sind in den Analogen angeschlossen, da die Tasten Kapazitiv arbeiten.. Hier nochmal die einzelnen Schritte für eine Kapazitiv arbeitende Taste 1
wählen (TRIS = 1) 4. ADCON wählen 5. Konvertierung starten (GODONE == 1) 6. ADCWERT ablesen (10Bits -> ADRESH und ADRESL) 7. Kondensator Clast am AN0 entladen (TRIS = 0) Also das ganze funktioniert soweit mit dem C-Code..Ich habe auch eine Funktion wo ich die ADC Werte 8x auslese und eine Mittelwert
-
Thread
globaler counter funzt net wie erwartet
== 1){ uint8_t sec_takt; damit ist es doch immer atomar, oder kommt gcc auf die idee die bits einzeln zu setzen?
ähnlich wie Hardwareregister) mit dem Schlüsselwort volatile (flüchtig) versehen werden, damit der C-Compiler berücksichtigen kann, dass diese Variablen jederzeit (durch das Auftreten des Interrupts) gelesen oder geschrieben werden können. Ansonsten würde der C-Compiler das regelmäßige Abfragen oder
-
Thread
Verilog for Schleife
schrieb im Beitrag #2739001: > geht es dort Nein, es gibt kein solches Bauteil: ein RAM, das ALLE Bits einzeln an eine Leitung heruasgeführt hätte. Oder doch ja: indem jedes Bit einzeln ein "richtiges" Flipflop einer Logikzelle auffrisst... :-o
Lothar Miller schrieb im Beitrag #2739085: > Nein, es gibt kein solches Bauteil: ein RAM, das ALLE Bits einzeln an > eine Leitung heruasgeführt hätte. > Oder doch ja: indem jedes Bit einzeln ein "richtiges" Flipflop einer > Logikzelle auffrisst... :-o Hat ja auch keiner was von 'nem RAM erzählt
-
Thread
DC-Standards und Spannungsreferenzen
verbaut. Da war halt damals das was zu dem Preis machbar war. dieser Op 05 macht aus den (Bild /-1) einzeln ausgemessenen 6,... V (siehe gelbne Aufkleber) der Typischerweise verwendeteten 1N817A Referenzdiode die 10V Die Dioden-Logik und die 7404 dienen lediglich zur Schalter ABFRAGE (von deren 2. Schaltkontaktebene
Abwandlungen welcher > Natur? MAX6250A anstelle AD586L R2,R3 = 49,9 Ohm; R6 = 0 0hm (dadurch ca 2 Bits Überlappung) R7 auf optimale Linearität abgeglichen (bei mir ca 7,2 Ohm) Integrator auf 100 Hz dimensioniert: also C1 = 100nF, R1 = 100k. Das ganze dann mit 100 Hz PWM betrieben. Die Werte im
-
Thread
Schematic + Board
den 2 Sachen die noch gemacht werden müssen möchte ich folgendes machen: 1. Ein 0-10VDC mit 8 Bits vom µC ausgeben. Ein R2R Netzwerk dafür ist wohl zu ungenau. Also habe ich einen DAC gesucht. Mit PWN kenne ich mich nicht aus, also möchte ich es mit den 8 Pins machen. 2. Mit den Relais
5Bit 32 verschiedene Zustände ausgeben kann, dann ist es Sache der Programmierung des µC wie ich die interpretiere. So kann ich z.B. nur 4 Bearbeitungsschritte haben, also nur 4 verschiedene Werte. Wenn
-
Thread
String empfangen und auswerten
schon sowas wie eine Variable mit vielen Bytes gut. Also ein Array von chars. Das macht man so in C : char Buffer [16]; danach kannst du über eine Zahl oder Variable (Index genannt) auf einzelne chars zugreifen int i=0; char was; was=Buffer[5]; was=Buffer[i]; Wobei 0 das erste Element eines
Buffer[15]=UDR; Buffer[16]=UDR; Buffer[17]=UDR; Buffer[18]=UDR; Buffer[19]=UDR; } [/C] Nein. Was soll das sein? Tu dir selbst einen Gefallen und lern doch erst mal die Grundlagen. Versteh, was die einzelnen Komponenten machen und warum der Code so ist wie er ist http://www.mikrocontroller.net