-
Thread
UART im Interrupt, Daten direkt in EEProm speichern
ist C Das ist so zimlich der ganze mist was ich ausprobiert habe: ISR(USART_RXC_vect) { cli(); a = UDR; eeprom_write_byte(&wert1,a); // while ( !( UCSRA & (1<<RXC)) ) ; // solange
aber nur wenn er irgendwas in den Flash schreiben würde Schon klar, aber warum nicht diese eine Abfrage noch zusätzlich einbringen? Kostet Initial max 2 Takte...
-
Thread
5 Tasten am ADC
Rick M. schrieb im Beitrag #2239337: > JTD-Bit: If this bit is one the JTAG interface is disabled. (write twice > within four cycles) muss in C So aussehehn MCUCSR=0x80; MCUCSR=0x80;//jtag off Es kann zur Laufzeit genau so eingestellt
weil ich in binär/hex denke jedes hexziffer steht für ein nibble aus 4 bit wnn man das erst mal im hirn hat weis man erst was dez für eine Krücke ist ich sehe f und wis alle 4 bit des nibble sind gesetzt sehe ich c weis ich die oberen beden nibble singesetzt sehe
-
Thread
RFM 12 Wake-Up und start nach POR
Wake-Up Timer über Twake-up = M * 2R setzen. 2. Power-Management: Modul-Ausschalten 3. Über uC wenn WKUP-Bit im Statusregister gesetzt dann Powermanagement einschalten. 4. Daten senden. 5. WKUP-Bit falls notwendig event. löschen. 6. Fange wieder bei 2. an. Zu meiner anderen Frage...
2R setzen. 2. Über Power-Management-CMD: Sender-disablen und Wake-up Timer enablen. 3. Über uC (nIRQ) wenn WKUP-Bit im Statusregister des Moduls gesetzt, dann Powermanagement-CMD Wake-up Timer disablen und Sender enablen. 4. Daten senden. 5. Fange wieder bei 2. an. > Die Zeiten nach
-
Thread
Probleme UART, Baudrate Atmege8
Multimeter nachmessen und dann entscheiden, ob der µC läuft oder nicht. Wenn du sinnvolle Wartezeiten wählst, kannst du mit der LED und einer Stoppuhr nachmessen, ob der µC richtig bzw. wie erwartet tickt.
autobaud Funktion. Da sendet der PC z.B. viele ASCII 'U' in Binär 01010101. Man misst dann die länge einzelner Bits im verhältnis zum eigenen Zeitnormal (der RC Oscillator) und stellt den Baudratendivisor etsprechend. Damit hat man auf den Quarz im PC Kalibriert. man Könnte jedoch auch den internen RC-Oscillator
-
Thread
Strings in Array schreiben und in einer Zeile ausgeben
Ich versteh jetzt ehrlich gesagt auch noch nicht, wo da jetzt das große Problem sein soll. Jedes C-Lehrbuch lässt sich in einem der vorderen Kapitel des langen und des breiten über Arrays aus. > [code] > uint16_t ADC_Read( uint8_t channel ) > { > // Kanal waehlen, ohne andere Bits zu beeinflußen
noch einen Zähler für diesen Zweck [C] uint16_t adcValues[100]; uint8_t nrADCValues; [/C] und wenn vom ADC ein neuer Wert kommt, dann wird er im Array hinten angefügt (SIcherheitshalber mit einer Abfrage, damit es zu keinem Überlauf
-
Thread
STM32 GPIO setzen, löschen, abfragen
hi, als Einsteiger beschäftige ich mich gerade mit den GPIOs. Dazu habe ich folgende Frage: Um einen Pin zu setzen oder zu löschen gibts ja 3 Möglichkeiten: 1. Berechnung der Bit-Band Adresse des entsprechenden Pins und diesen direkt setzen (soll am schnellsten gehen) 2. Per Befehl GPIOx->ODR = 00001000; 3. Per BSRR Register Welche Unterschiede haben die Möglichkeiten 2 und 3....?? Beide greifen auf das ODR zu und setzen / löschen den Pin. Warum nutzt man nicht immer den Bit-Band Zugriff? Da der Compiler ja die meiste Arbeit übernimmt ist das zeit- und codemäßig die schnellste
-
Thread
Warum keine Netzfrequenz im Netz?
Man kann sie auch recht einfach mit einem einfachen µC selber messen. Mit einem Nulldurchgangsdetektor und einem 16 Bit Zähler wird das schon verdammt genau. Nix mit Top Secret!
> Mit einem Nulldurchgangsdetektor und einem 16 Bit Zähler wird das schon > verdammt genau. Es sei denn, man nimmt als Zeitbasis die Netzfrequenz ...
-
Thread
DS18S20 über RS232->USB-Adapter
Vielleicht i2c-tiny-usb? http://www.harbaum.org/till/i2c_tiny_usb/ Funktioniert unter Linux prima. Sollen auch Treiber für Windows dabei sein.
digitemp_DS9097 -version digitemp_DS9097: invalid option -- 'e' DigiTemp v3.5.0 Copyright 1996-2007 by Brian C. Lane GNU Public License v2.0 - http://www.digitemp.com Compiled for DS9097 ... root@erde:~/scripte# digitemp_DS9097 -t 0 -q -r1750 -c /etc/digitemp.rc -o %.3C 21.750 root@erde:~/scripte# digitemp_DS9097
-
Thread
AVR Synthesizer Konzept
sie nicht sehr viele Kanäle (meistens nur 4). Ich möchte einen Midisynthesizer bauen, so dass der µC nur die Mididatei einliest, ohne Umwandlung. Hier beginnen aber schon die Probleme: Atmega8 @16Mhz -> 16 mio Befehle/s Ausgangsformat 22050Hz @8bit (erstmal PWM, später 16bit DAC) (Tonausgabe
immer ein Byte (also 8 Töne) abfragt, ob ein Ton darin aktiv ist, hat man pro Kanal schonmal 11 Abfragen: 88bit = 11Byte mögliche Töne pro Kanal. mit 11 Abfragen hat man aber schon die halbe Zeit verdödelt. Dazu kommt noch die Tonerzeugungsroutine, sollten Töne aktiv sein. Der Avr ist eindeutig
-
Thread
Uhr mit hilfe von Uhrenquarz
einem Infinieon Programm: Die Firma heißt "Infineon"... Schreib doch einfach, WAS du mit WELCHEM uC WIE machen willst. Du kopierst irgendwo irgendwelche Codezeilen zusammen und kapierst sie nicht... > später in der main kann ich in der while-Schleife dann so abfragen? Das kann man, wenn man sich
evtl. nicht mehr aus. > Einen Hardware-Vorteiler braucht man nicht, wenn man einen MC nimmt. Der uC /hat/ einen Hardwareteiler, so hatte ich das gemeint ;-) Und wenn 16 Bit nicht reichen, dann muß Software her... > ISR (TIMER1_OVF_vect) > { > sekunden++; Das geht wieder nur, wenn ein
-
Thread
ATmega 16 servo poti
Value = 127; // probehalber, kommt später vom ADC OCR1A = Value * MS_1 / 256 + MS_1; [/C] (Optimizer einschalten, damit der die Taktberechnungen gleich wegoptimiert. Das dein µC auch wirklich mit 16Mhz rennt, hast du kontrolliert? Spannungsversorgung vom µC und Servo sind ausreichend dimensioniert? Blockkondensatoren hast du an den Versorgungspins des µC?)
-
Thread
(Speicher?-) Problem mit STM32 + VCP
jetzt aber die beiden zeilen: [c] // char ReceiveString[0x100]; // unsigned char ReceiveStringLength; [/c] wieder "einkommentiere" lässt sich das Programm anstandslos kompilieren und flashen. allerding springt mir das programm
ReceiveStringLength = USB_SIL_Read(EP3_OUT, &ReceiveString); // }; }; }; [/c] Ich hab jetzt mal folgende Theorie aufgestellt: Der USB-stack definiert für die einzelnen Endpunkte Bestimmte Speicherbereiche. Diese haben Feste Adressen. Aber vor diesen Adressen ist noch ein
-
Thread
Eingänge abfragen
Nimm an, Du würdest einen Port mit 8 Eingängen abfragen und ignoriere die Bits die auf Ausgang geschaltet sind.
im Prinzip wie Guru schon schrieb, benutze Bit-Masken für jeden einzelnen Eingang
-
Thread
Protokoll für Datenübertragung
Beschränkung so vorgegeben... Wie schön für dich. Wenn man sich mal vorstellt das mit einer 11 Bit ID 2048 verschiedene Adressen für eine Aufgabe zur Verfügung stehen und mit einer 29 Bit Extended ID sogar 536 Millionen, dann frag ich mich ob da nicht eine komplette Fehlplanung vorliegt.
1 Byte XOR halt XOR aus allen anderen und dann 1 Byte End of Frame Als nächstes schickt der uC nachdem er die empfangenen Daten überprüft hat eine bestätigung und vergibt dabei die PID oder wenn ein Fehler auftrat eben eine Anforderung das vorherige nochmal zu senden Nun snedet der uC die eigentlichen
-
Thread
Drehgeber code
möchte die Pinbelegung ändern.Wie kann man das tun? Ausserdem verstehe Ich nicht was das hier soll: "C = Low" Ich vermute das ist das "Carry bit", aber ist es nötig ihn zu löschen?
werden. Wie Du siehst, geht es hier um einzelne Bits des alten und neuen Drehgeberstaus, die zu einem Index zusammengebastelt werden. Da wird das nichts, mal einfach "OldEncoderValue = 25" oder so zu schreiben... ;-) ...
-
Thread
ADC Werte (Formel)? Gesperrt
Hallo, möchtest du dann hier Werte abfragen oder einfach eine Maschinenzyklenzeit von 100 etc. durchlaufen lassen ?
Ja weiß ich aber ich hab nur nen Attiny 13 und der hat nur nen 8 bit TC. Deswegen versuch ich ne bessere Auflösung so zu bekommen .
-
Thread
MCP23016 Port Expander Input Realisieren
ich ja nicht machen weil es dieses Register auf dem Expander gar nicht gibt. Wie kann ich dann abfragen ob ein Button an GP1.0 gedrückt worden ist? Gibt es da dann vielleicht eine i2c_read Funktion? Vielleicht kann mir da jemand weiter helfen?
oder ähnlich :-) Bei meiner Hardware habe ich 3 Buttons, die ich mit pollen nach dem Zustand abfrage. [c] Display_Read(0x0, &Data); if(Data == 0x08) { Switch_On(LED_Blink2); } [/c] Bei mir sieht das Read dann so aus (Beispiel Demo.c von Keil) [c] bool Display_Read (uint8_
-
Thread
bezahlbarer GPIB-Adapter
selbst sein Mess-System zusammenbauen. Ein paar ADC kaufen, ein paar DAC, ein paar Optokoppler, eine uC-Platine, ein wenig Messdatenaufbereitung, einige Zeilen C-Code, viel Zeit und fertig ist die Laube . . . Vielleicht ist das stressfreier als einen GPIB- Adapter zum Laufen zu bringen für ein altes
auf PCs. Dazu muss das .NET-Framework installiert werden. Damit hatte ich auch schon Stress. C pur ist ok. Nur wie komme ich dann zu einer einfachen grafischen Ausgabe, so ähnlich VB? Das Monsterpaket von MS zu C++ überzeugte mich nicht. Wenn man jeden Tag damit werkelt mag es gehen. C# braucht
-
Thread
Anfänger Frage zu PWM beim ATMEGA8
************************************ PIN C1 *********************************** if ( PINC & (1<<PINC1) ) /* Fuehre Aktion aus, wenn Bit Nr. 0 (das "erste" Bit) in PINC gesetzt (1) ist */ { DIMMER2(); } // ************************************ PIN C2 ***************************************** if ( PINC & (1<<PINC2) ) /* Fuehre Aktion aus, wenn Bit Nr. 0 (das "erste" Bit) in PINC gesetzt (1) ist */ { DIMMER3(); }
-
Thread
Erste Schaltung: Terrariensteuerung/DCF77/Dimmer/Schalter
Nulldurchgang der Spannung recht genau bestimmen, dafür muss ich ja ständig einen der Eingänge abfragen (polling). Wenn ich die Kommunikation über den 1-wire-Bus in Software selber gieße, ist der µC ja eine ganze Weile mit selbigem Bus beschäftigt. So weit ich weiss dauert die Übertragung eines Bits
Widerstand an, werden vielleicht noch mit Schmitt-Triggern aufbereitet und der Impuls wird an den µC geleitet.
-
Thread
Binärzählwert als Dezimalzahl auf LCD-Display
dem HD44780 Display etwas ausgeben willst musst du zuerst die Initialisierung machen. Das sieht in *C* so aus: [c] LCD_Instruction(56); //Function Set (8 bits) LCD_Instruction(56); //Function Set (8 bits) LCD_Instruction(56); //Function Set (8 bits) LCD_Instruction(1); //Display
verschiedensten Technologien zu erledigen. Das könnten z.B. sein: 1. Röhren-Logik & Nixie-Anzeigen 2. Einzelne Transistoren 3. Einzelne IC's Analog & TTL/CMOS-Logik 4. Ein µC & Assembler oder BASCOM oder C/C++ 5. Ein CPLD/FPGA & VHDL oder Verilog 6. Googeln und nachbauen Wie gesagt ein guter Ingenieur
-
Thread
Vom Meister zum Master of Science
übrigens auch für die HS in Wales interessant http://www.jusline.de/index.php?cpid=77cc2619465c939cd4189c33216b2d0c&feed=14710 "Die unstrittige Anerkennung ausländischer Abschlüsse in Deutschland indiziere die Anerkennung einer souveränen Hochschulpolitik für die jeweilige ausländische Universität
Das Hauptstudium fiel mir zumindest leichter, eben weil es fachlicher und anwendungsbezogener war (µC/Steuerungstechnik/Schaltungen/C/C++/etc.). Auch ein Anteil an „Laberfächern“, wie BWL, Projektmanagement, Umweltschutz, Arbeitsschutz, etc. war enthalten. Vorsichtig ausgedrückt könnte man diese Fächer
-
Thread
Motor-Poti für Gitarrenverstärker
frei. Das ist schonmal "gut gewirtschaftet". Der Mega8 hat 512 Bytes EEPROM. Bei 6 Potis im 8-Bit-Mode reicht das für 85 Einstellungen. Der Master braucht nur 2 Befehlsgruppen, die in ein Byte passen (Bit 7 für Scannen/Bewegen, Bit 6..0 für die Nummer des Speicherplatzes). Also die Zahlenwerte von
erübrigt. - Absenden des Befehls mittels Stern- bzw. Rautentaste. Da zur Befehlsunterscheidung 1 Bit gebraucht wird, stehen noch 7 Bit für die Angabe der Speicherplatznummer zur Verfügung, es sind also 128 Speicherplätze möglich, von 0 bis 127. Bei Einsatz eines zweistelligen Displays sind 100 Speicherplätze
-
Thread
DS18B20: Mehrere Sensoren am Bus, nur letzte Temp. stimmt
C 01: s01 28db11a20000003d 01a9 +26.5625 C beide: 00: s00 28181ea200000094 0550 +85.0000 C 01: s01 28db11a20000003d 0196 +25.3750 C [/code]
OneWire nie. Es gibt nur (angelöteter 4k7 nach VCC) und am OneWirePin die Zustände DriveLo := {PortBit=0; DdrBit=1; } oder Release := {DdrBit=1; }. Das hab ich so aus der Atmel-Applicationnote für OneWire-Master ( http://www.atmel.com/dyn/resources/prod_documents/doc2579.pdf ) und der onewire.c
-
Thread
Voltemeter mit PIC16F887
;********************************************************************* ;16 bit Adition, C-Flag bei Überlauf gesetzt Add16 ; 16-bit add: f := f + xw movf xw0,W ; xw0 nach W addwf f0,F ; f0 := f0 + xw0
******************************************* ; 16 Bit Subtraktion, bei Überlauf (neg. Ergebnis) ist C gesetzt Sub16 ; 16 bit f:=f-xw clrf Fehler ; extraflags löschen movf xw0, w
-
Thread
EEPROM / D-FLASH Zugriff beim XC888 / Variable nicht flüchtig speichern, INFINEON XC888
bereits einen FlashHandler, mit welchem man in den D-Flash Speicher des XC888 schreiben kann, alles auf C- Basis. Ich werde leider aus den Beispielen überhaupt nicht schlau - ich möchte einfach nur wissen, mit welcher Funktion ich einen Wert (8 oder 16 Bit) in den D-Flash speichern kann und wie ich
das kann nicht mein Problem sein. Warum wird der Sector nicht gelöscht und warum löscht der Code Bits beim schreiben (0x0F->0x13)? Ich habe auch schon ein 500ms Timeout hinter den besagten Funktion ausprobiert - das gleiche.
-
Thread
Brötje ISR Plus Kommunikation / LPB
> Bytes 10+11 von HEX in Dezimal umwandeln ("01FF"=>511) und durch 64 > teilen (511/64=>7,984375°C). Ebenso ist hier noch offen, wie die > negativen Zahlen dargestellt werden. Negative Temperaturen: Könnte ein ganz normaler "signed Integer(16bit)" sein. Wenn das höherwertigste Bit gesetzt
sofort auf mit dem Senden und fange oben wieder an. Danach folgen nach gleichem Muster die folgenden Bits, Bit 7..0, Parity und Stop Bit. Ich habe das auf einem AVR mit Software-Uart gemacht. Damit kann eine Kollision sofort erkannt werden, da ja jedes einzelne Bit überwacht wird. Wenn man den Hardware-Uart
-
Thread
UART-Interrupt Problem
wenn "MotorRunning" nicht gleich ein > ganzes Byte einnehmen würde sondern wirklich nur ein Flag (Bit) in einem > Byte? Grundsätzlich ist die kleinste Einheit, die du in C ansprechen kannst immer ein komplettes Byte. Willst du auf einzelne Bits runter, dann musst du mittels | bzw & die entsprechende
und Bit-Abfrage Operationen, wie sie in jedem Programm zu Hauf vorkommen. Nur war bei dir wahrscheinlich Bit setzen bzw. Bit löschen meistens auf einen Port bezogen um damit einen Portpin zu schalten. Aber
-
Thread
[Atmega8] Programm hängt
} sei(); } while(UP(BACK)); StopTimer(); ClearBuffer(); } [/c] Die kleinen Routinen StartTimer und StopTimer steuern den 16bit Timer, die ISR zählt die Sekunden (sec) und steuert auch wann die nächste Messung durchgeführt wird: [c] void StartTimer(void) {
wenn der µC hängt, dann prüfe doch mal den Pegel der I2C-Leitungen und ob sich dort noch was tut. Mach dir zwischen den einzelnen I2C Funktionen noch ein paar Debugausgaben auf den UART damit du siehst wo es hängt
-
Thread
Schaltuhr 6 Kanal
nur 12 Alarmzeiten maximal sein können. Wobei man es in Tage Stunden und Minuten nacheinander abfragen kann und immer den nächsten rausnimmt. Dann müssten 6 Abfragen immer reichen. Der Aufwand in einer Abfrage dauert keinen Bruchteil einer Sekunde und die Sortierung würde nur dazu führen, dass nach
ich hätte eben die Zahlen direkt in BCD gespeichert. Daher wären die 1 und 10 er ja eben jeweils 4 Bit. Daher ein Byte für die Zahlen der Minuten usw... könnte ich mir aber auch umstricken. Wobei 32 Bit auch 4 Byte sind... aber ich brauche ja das Jahr nicht... wer schaltet schon einmal im Jahr!?
-
Thread
Entwicklung eines Bussystems
mit den Sensoren und Aktoren, I2C Bus mit Puffern laeuft ca 50kBd, habe nur einen Master, aber viele MCUs haben Mu!timaster. Ich habe CAT 5 Kabel, 2 Adern I2C, 4 fuer Gnd + 5v + 12V, fuer die 2 verbleibenden baue ich ein RS485 Netzwerk
: Ringkerndrossel TLC 5,0A - 470 µH? R1: Metalloxydwiderstand 1W, 5%, 68 Ohm? > besser?^^ C2: Elko radial, 105°C, 47µ/10V, low ESR, RM 2,5mm, +-20%? >>> aber Lebensdauer nur 1000 Stunden!?
-
Thread
Timer0 mit abfallender Flanke
} else { counter = 0 ATOMIC_BLOCK(ATOMIC_FORCEON) { // 16-Bit Zuweisung ist nicht atomar deshalb ATOMIC_BLOCK counter = 0; } } } } } [/C] Wenn das zufriedenstellend läuft kannst du den while-Anweisungsblock in die ISR reinziehen
nichts. Du kannst nicht mehr den ganzen Port einfach so umstellen. Du musst schon gezielt ein einzelnes Bit (das mit der jeweiligen LED korrespondiert) entweder setzen oder löschen. Wenn du zb LED1_OFF ausführen lässt POTB = 0x00; dann löscht du damit ja auch gleichzeitig die LED2. Und
-
Thread
Atmega stürtzt nach ca. 15 min ab
es am besten geeignet ist. Wenn man ein kleines Programm schreibt, das zu einem hohen Anteil an einzelnen Bits herumfummelt und bei dem genaues Timing wichtig ist, ist Assembler die richtige Wahl. Wenn man hingegen ein Programm schreibt, das komplexe Abfolgen abbildet, nimmt man eher C. C ist nicht besser
pop r17 pop r16 out SREG,r16 pop r16 reti limits: .db $FF,$EA,$D5,$C0,$A8,$90,$70,$00 [/avrasm] Der Code basiert allerdings auf der Annahme eines Fehlers in deinem Programm. Bei deiner Abfrage > cpi temp, $70 > brsh zwei_an > cpi temp, $69 > brlo eine_an
-
Thread
RFM12 Statusabfrage
Um 16Bit per SPI zu übertragen einfach 2x hintereinander abfragen. Das funktioniert problemlos. Du musst nur dadrauf achten, zwischen den beiden Übertragungen die nSEL Leitung auf 0 zu belassen. Ciao,
, digital filter rf12_trans(0xCA81); // FIFO generates IT @ 8 bit received data bits, no sensitive reset rf12_trans(0xC483); // AFC a1, oe, en rf12_trans(0x9852); // Tx configuration, FSK modulation parameters, output power -5dB rf12_trans(0xE000
-
Thread
8-Bit Latch mit "Read-back"
Memory-Mapped Ports. Das hat dann in meinem Fall den Vorteil, des sehr sehr einfachen Zugriffs auf ein einzelnen Bit des 8-Bit Ports (von denen ich übrigends 5 benötige) Der Zugriff sähe dann wie folgt aus: typedef struct { char bit0: 1; char bit1: 1; char bit2: 1; char bit3: 1; char bit4
Wenn es darum geht, Bits einzeln zu setzen/löschen zu können, ohne den vorherigen Zustand kennen zu müssen, dann tuts vielleicht auch der '259. Da gehen die Bits dann allerdings nur einzeln, weil adressierbares Latch. Dafür
-
Thread
I2C per Interrupt auf Atmega32
einzeln setzen und zuletzt das TWINT Bit setzen (um die Interrupt-Flag zu "clearen"). Problem an der Sache: Es funktioniert nicht. Wenn ich allerdings das TWCR explizit mit dem gesamten Bitmuster setze
Also das TWEN-Bit muss ja auch jedesmal mit gesetzt werden. Ich habe auch die Erfahrung gemacht, daß das einzelne setzen und löschen des Bits im Kontrollregister nicht funktioniert sondern das ganze Register auf einen
-
Thread
Code Optimierung (Geschwindigkeit) AVR, C
halt die Erfahrung, wie man sowas richtig programmiert, welche Variante währe zum Beispiel richtig: [c] while(RFM12_INT_PIN&(1 << RFM12_INT_BIT)); [/c] oder [c] while(RFM12_INT_PIN&(1 << RFM12_INT_BIT)) __asm volatile ("nop"::); [/c] oder vielleicht [c] while((volatile) (RFM12_INT_PIN&(1 << RFM12_INT_BIT))); [/c] Guru schrieb im Beitrag #2156015: > Ohne das ich das jetzt im einzelnen nachgeprüft habe, wird die maximale > Tatktfrequenz der SPI-Schnittstelle von der Systemtaktfrequenz abhängen
-
Thread
AVR asm - Befehl nur jedes 2. mal ausführen
würden zwischen den Zündungen 220 Takte vergehen. Also baue ich eine Routine die alle 220 Takte ein 16bit-Register hochzählt. Dann kommt die ISR, der 16-bit Zähler wird übergeben. Ist der Zähler niedrig, ist die Drehzahl hoch und andersrum. Dann setze ich die obersten 2 Bits auf 1 und komplementiere
nun das zu verwendende Bitmuster ;Anzeigen sbrc r16,0 ; Skip if Bit in Register is Cleared; also wenn Bit 0 sbi PORTC,4 ; in r16 0 ist, dann nächste Anweisung (LED setzen) überspringen sbrc r16,1 ; und die einzelnen Bits in r16 abklappern... sbi
-
Thread
Finde Fehler nicht !
8 Taster sollen nicht 8 Inputbits belegen, sondern nur 4. Ich wollte es binär lösen. Taster 1 = Bit 0 Taster 2 = Bit 1 Taster 3 = Bit 0 + Bit 1 etc. Hier der Code: [c] /*----------------------------------------------------------------------------- ON - OFF switch with pushbutton 8
was wie "den PIN auslesen" tust du gar nicht. Du ließt den kompletten Port (alle acht Pins, also 8 Bits) und dann maskierst du ein einzelnes Bit aus. Und das Ergebnis ist dann halt entweder 0, oder der Wert, der sich ergibt, wenn nur diese eine Bit im Byte 1 ist.
-
Thread
Stromzähler mit MODBUS RTU auslesen
. Der Siemens Zähler hat 96 16bit register, welche mit einem Befehl ausgelesen werden können, nach dem Motto, gib mir von Register 0 - 96 alles. Dannach liegen die Daten in einem C-Array (uint16_t xy[96]), und können ausgewertet werden
Danke für den tollen Beitrag! Die Länge eines Perl-Arrays bekommst du übrigens wie folgt: [c]my @foo = qw(foo bar baz); print scalar(@foo);[/c]
-
Thread
Was wird Entwicklung einer Platine mit uC, Display, USB kosten?
die Software ist wirklich Trivial: USB mit Portausgabe und Async ser. Out (RS232) und ausgabe auf 8Bit Port macht bereits das CDCDemo von Microchip, Der RS232 Part wird durch i2c aus einer anderen AN erstzt (habe da auch schon eine im Kopf), Fehlt noch die Abfrage des Inc. Gebers wofür es auch eine
wie wir. Kannst Du dann bitte mal so eine tolle Library herzeigen? Also konkret ne Multimaster-I2C Lib in C geschrieben und kommentiert. Oder wenigstens ne einfache 4Bit HD44780 Lib in C. Oder ist das alles nur heiße Luft? Peter
-
Thread
RC Empfänger auswerten, Signal modifizieren und wieder ausgeben
output_cnt=0; ch_ready=3; } else output_cnt++; } } [/c]
Beitrag #2153857: > allerdings tue ich mir noch schwer einen > Atmel zu finden den ich bei "R" oder "C" bekomme... Beim "C" kuft man keine Atmels. Schau dich mal hier um: www.csd-electronics.de Oliver
-
Thread
Wie programmiere ich das am besten.
Einfachheit und Variabilität wegen die Module wie folgt ansprechen: [c] unsigned int buffer; buffer = Read_16bit_DI(1); // Lese die 16bit-Eingänge des ersten Moduls Typ 0x13 Copy_16bit_DO(2, buffer); // Kopiere buffer nach Ausgänge des zweiten Moduls Typ 0x82 [/c]
Read_16bit_DI(char position){ char temp, adresse; if(modul_0x13 >= 1 && position >= 1){ temp = (modul_0x13 + position) - 2; } adresse = modulpos[temp]; //.... } void Copy_16bit_DO
-
Thread
Wie Kodierschalter auswerten?
Hi >Aber so muss ich dann 16 Zustände abfragen. Oder gibt es da eine >schlauere Variante? Die vier Bits ergeben schon die Zahl. Wenn du den Schalter an Pin0..3 eines Ports anschließt reicht (Pseudocode) zahl = (PINx & 0x0F) MfG Spess
El Nino schrieb im Beitrag #2140528: > Aber so muss ich dann 16 Zustände abfragen. Oder gibt es da eine > schlauere Variante? Ja. [c] zahl = ~PINC & ((1 << PC2) | (1 << PC3) | (1 << PC4) | (1 << PC5)) [/c] Gruß
-
Thread
Beispiel "Entprellun" Verständnissfrage
da mal brav wieder Einsen rein ∗hüstel∗ Was Du machen musst ist die Logik umdrehen, nicht die einzelnen Bits.
Dieser Code ohne Entprellung [C] if (!( PIND & (1<<PIND4))) { //Aktion } [/C] wird mit Hilfe der Routinen aus dem Artikel [[Entprellung]] so ersetzt [C] // Anpassungen der Defines an die tatsächliche Hardware