-
Thread
Wer hat Erfahrung mit HAP?
// Bedienoberfläche (Bit 16 - 16) #define COHAAS // Autonome Steuerung (Bit 17 - 17)[/c] Wenn ich HTERM nutze dann habe ich die VirtualBox gar nicht gestartet also können sich HTERM und HAP
@ Carsten W. Hallo, ich bin gerade mit deiner Firmware am rumprobieren. Und Zwar ich habe den µC mit folgenden Einstellungen [c]#define COHAES // EEPROM-Support (Bit 0 - 0) //#define COHAER // Externer Reset (Bit 1 - 1) /
-
Thread
Effezenter Drehgeber decoder in c
schon besseren code: Am einfachsten realisiert man das mit einer state machine als Tabelle. In C sieht das so aus. int table[4][4]={{0,1,0,0},{-0,0,0,0},{0,0,0,-1},{0,0,0,0}}; int position=0; // zaehlen wir mal die absolute Position volatile int quadrature_input; // bit 0 und bit 1 sind
. [/c] W.S.
-
Thread
Laufschrift Denkanstöße
uint8_t x, uint8_t y) { glcdSetPageColumn(x/8,y); glcdSendData(0<<(x%8)); } [/C] Fonts die nur eine Page benutzen, schreibe Ich so [C] glcdGotoXY(x,y); for (index=0;index<font.fontPtr[2];index++) glcdSendData(swapBits(font.fontPtr[font.indexNum+index]));
glcdClearPixel(start_line + line, start_col + col); col++; } } } [/c] Jetzt bleibt mir nur noch [c] if (ticker_font[ch][line] & (1<<(TICKER_COLS - offset))) [/c] Was muss ich da abfragen? Das aktuelle Zeichen?
-
Thread
Einzelnen Portpin lesen
Hallo, ich würde gerne lesen was an einem einzelenen Portpin für ein Signal anliegt. Ich würde es gerne über ein [c]#define[/c] machen. Zuerst dachte ich ich könnte [c]#define MEINPORTPIN PINK2[/c] sagen. Das geht aber nicht. Hat jemand eine elegante lösung für mich. Wie mache ich das? [c] //ATmega2560 #define MEINPORTPIN ((PINK & 0x04)>>2) void main(void) { DDRK&=0xFB;PORTK&=0xFB // Port K, Bit 2 -> INPUT, TRISTATE while(1) { if (MEINPORTPIN == 1) { //mache das } else if (MEINPORTPIN == 0) { //mache das } } [/c] Grüße
-
Thread
Wechselrichter Hoymiles HM-xxxx 2,4 GhZ Nordic Protokoll?
empfangenen Rohdatenstreams wird aus: [pre]01-6C-4A-B9-88-23-0C-B9-88-23-0C-80-80-00-80-AC-00-AE-02-55-00-AB-00-AA-82-46-00-00-5A-17[/pre] Beim Schieben des ganzen Streams um ein Bit nach links diese Bytefolge: [pre]02-D8-95-*73-10-46-19-73-10-46
1 zugeordnet, obwohl sie zu Pipe 0 gehören. Hier ein Beispiel, gehört eigentlich zu Pipe 0, die Abfrage [c]radio2.available(&pipe)[/c]liefert aber Pipe 1, darum wird das Telegramm C3 zugeordnet und anschließend wegen falscher Prüfsumme (Die Berechnung legt die Adresse WR2 zugrunde) verworfen. In den
-
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
Taster entprellen
flankengesteuerte Auswahl nicht bringt. Und spätestens wenn du statt Tastern Inkremenetaldrehgeber abfragen sollst, merkst du, daß man mit der Reaktion auf Flanken per Interrupt auf dem Holzweg ist. Bei einzelnen Tastern geht noch beides. Aber sei dir sicher: Deine PC-Tastatur tut es nicht so wie du!
Zustand abgelesen werden. Die eigentliche Erkennung der Flanke erfolgt natuerlich vorher ueber die Abfrage ... [c]if (var != Taster1_IN)[/c] Anschließend werte ich in meiner Funktion "Flankenerkennung" ja nur noch aus, um welche Flanke es sich gehandelt hat, um nicht auf jede Aenderung des Zustands
-
Thread
Programmierung in C für MSP430/Output und Input
while(1) { if(P1IN & PIN5) //Port1.5 abfragen ob 1 { P1OUT = PIN0; //solange Port1.0 einschalten } } } [/c]
anderes hängen, das Du /nicht/ einschalten willst. Und da kommen die Bitmanipulationsfunktionen von C ins Spiel: [c] while (1) { if (P1IN & PIN5) // Port1.5 abfragen ob 1 { P1OUT |= PIN0; // solange Port1.0 einschalten } else { P1OUT &= ~PIN0;
-
Thread
Entprellung Ziffern-Tastenfeld
> der Hersteller der uC? Kenn ich ehrlich gesagt gar nicht... wo finde ich diese Notes? > Natürlich kannst du, wenn es unbedingt sein muss, auch 14 Pins und > Abfrage nach Dannegger verwenden, einfach 2 bytes verwenden
" - so dass key_press_C null bleibt, wenn sich ein anderer Pin ändert. Wenn ich get_key_press() verwende (hatte ich anfangs), müsste ich die Funktion mit entsprechender Maske pro Taste einzeln aufrufen, oder? Ich fand das
-
Thread
Port Definitionen
AD-Messung? Und wie kann ich in der Funktion damit arbeiten. Muss ich den Pin oder das Bit übergeben? [c] int GetADC(???) { // hier Code return ADC; } [/c]
Und wenn ich jetzt eine einzelne LED am PIN 1 anschalten will. Muss ich das das Bit oder den Pin angeben.
-
Thread
STM32F103 Timer
mit den Timern des STM32F103. Kurze Erläuterung was ich machen will: Ich habe in einem Array 12 bit, die ich nacheinander auf einem Pin ausgeben will. Gedacht ist das in etwa so: [c] Ausgabe -> warte auf Timer -> Ausgabe -> warte auf Timer -> Ausgabe -> usw. [/c] Umgesetzt habe ich das folgendermaßen
sich in einer Schleife, z.B. >> for, viel sparsamer machen. > > Welche Abfragen meinst du? [c] GPRIOE->BSRR = data[0]; while((TIM2->SR & 0x1) != 0x1); TIM2->SR = 0; GPIOE->BSRR = data[1]; while((TIM2->SR & 0x1) != 0x1); TIM2->SR = 0; ... usw. [/c] Den Index des
-
Thread
Danneggers Entprellroutine im AVR benutzen
allerdings Arduino typisch zb mittels [c] ....... ( digitalRead( 2 ) << 2 ) + ( digitalRead( 5 ) << 1 ) + ( digitalRead( 9 ) [/c] dann ist das insofern ein bischen witzlos, weil die ganze Abfrage mittels digitalRead
nämlich wirklich nicht einfach, obwohl es nur ein paar Zeilen sind... Als Tipp: alle Variablen als einzelne Bits ansehen. Dann sind ct1 und ct0 die Bits eines Zwei-Bit-Zählers.
-
Thread
If Abfrage in C - Frage zu Verkürzung
ein logisches Ergebnis haben will, eben anschließend einem Vergleich unterziehen. Und nochwas: C ist nicht "aber sehr maschinennah". Vergleiche doch mal die Ausdrucksmöglichkeiten von C mit der Hardware in einem kleinen PIC16. Dort findest du ausdrückliche Befehle zum Arbeiten mit einzelnen Bits
> als die Syntax von C. naja, die Header braucht es in erster Linie, damit ich statt "Bit 4" einen symbolischen Namen nehmen kann. Wenn ich "Bit 4" meine sage ich in C einfach [C] if (PORTA & (1<<4)) [/C] ZigZeg
-
Thread
Wie viele Takte braucht diese ISR ca?
uint16_t Variable, alles andere sind uint8_t. DAS ist eine ganz entscheidende Information, da 16-Bit-Variablen auf einem ATMEGA328 grob doppelt so lang brauchen wie 8-Bit-Variablen und 32-Bit wiederum doppelt so lange. Dagegen sind die ca. 2-10T für eine if-Abfrage Peanuts. Es fehlt aber noch die
zusammengehören. Andre schrieb im Beitrag #6974811: > Wenn ich das richtig im Kopf hab, sind If Abfragen relativ > takt-intensiv, oder? Ich habe letztens die Anzahl der Takte für eine einfache if-Abfrage gestet und kam auf 6 Takte. Im Argument stand nur eine einzelne Variable. Logische Verknüpfungen
-
Thread
Byte über UART auswerten.
Die meisten Prozessoren können einzelne Bits verarbeiten. Sonst gibt es noch logische Operationen, mit denen man einzelne Bits ausmaskieren kann. Was willst du denn machen?
Bits ist von anderen oben ziemlich ausführlich beschrieben worden. Das zum Thema C-Grundlagen (Bitoperationen) wiederhole ich jetzt nicht...
-
Thread
input capture funktioniert nicht - Verständnisfrage
Hallo, trotz vieler Suche bin ich mit meinem Ergebnis für eine input-capture-Abfrage nicht erfolgreich. Ich wollte gern die Zeit zwischen ansteigender und fallender Flanke messen. Ich hatte angenommen, wenn ich dem Atmega16 in das Register TCCR1B das ICSE1-Bit = 1 schreibe, startet
Matthias Lipinsky wrote: [c] TIFR |= (1<<ICF1); // Flag löschen[/c] Ein einzelnes Flag löscht man mit "=". Mit "|=" werden gleich alle Flags in dem Register gelöscht.
-
Thread
ATmega128: M103C Fuse
N'Abend, ich habe eine Frage zum M103C Fuse beim ATmega128: Bei M103C gesetzt kann ich die eingehenden Signale z.B. über if(bit_is_set(PINC, 0))... abfragen, allerdings "versanden" Funktionsaufrufe und das Programm stürzt ab. Bei M103C
Jörg, mein Problem ist folgendes: Ich setze Ausgänge und benutze dann Funktionen wie loop_until_bit_is_set bzw. frage die aktuellen Belegungen über ein Bitfeld ab und prüfe dann die einzelnen Bits in Schleifen. Dieser Vorgang funktioniert aber nur, wenn ich den M103C setze. Ansonsten kann ich die
-
Thread
Zeitmessung funktioniert nur so halb :-/
@ oskar > Dir kommt das USART in die Quere. Inwiefern? > Du kannst die Abfrage der Lichtschranken auch in der Hauptschleife > machen und da dann die "Uhrablesen". Mache ich doch, oder? In der Hauptschleife (main) wird das Macro GET_P_C doch aufgerufen. > Ich habe mir
". Da könnte man in C-Programmen auch ein "goto" verwenden... Zum Thema: Im Prinzip ist es doch nichts anderes als ein Frequenzmesser. Da kann man entweder abfragen, ob sich etwas am Eingang gändert hat und die Zeit
-
Thread
Richtiges C++ hardwarenah
Hochsprachen arbeitet Für alle die hier nur das, was die rausgegoogelt haben, wiederholen: C++ ist weder für Mikrocontroller gedacht, noch geschrieben worden. Wenn es um Hardware geht, ist die Frage: plain C oder C++ *absolut* *irrelevant*. Einzelne bits setzen, Register mit irgendwelchen
Marc Vesely schrieb im Beitrag #3895049: > C++ ist weder für Mikrocontroller gedacht, noch geschrieben worden. > Wenn es um Hardware geht, ist die Frage: plain C oder C++ absolut > irrelevant. Einzelne bits setzen, Register mit irgendwelchen
-
Thread
EleLa - Elektronik Lagerverwaltung V4.0
Nachdem der CSV Import nicht ging habe ich jetzt versucht die Bauteile einzeln in einem Projekt einzutragen. Dazu habe ich folgende Zuordnung vorgesehen: Reference=>Symbol (z.B. C101), Value=>Wert (z.B. 100n), Footprint=Gehäuse (z.B. C_0603) und Characteristics=>Bemerkung (z.B
ist. Download von: www.elela.de Alle Versionen und Setup-Pakete sind erstellt. Details der einzelnen Änderungen seit V4.2.23C10 sind im Chat von EleLa https://t.me/mmvisual_elela beschrieben.
-
Thread
Unklarheiten bei einem C Programm
bloß ein einzelnes Bit löschen, löscht statt dessen aber alle. Ansonsten der selbe irreführende Register- / Bitnamenmix wie oben. */ PORTC = (0<<DDC0); } [/c] Grundsätzlich ist
So lasse ich mir das gefallen, da sieht man, welche Bits gesetzt sind, und kann es schnell ändern. Ok, wenn es ein Byte ist, werden 3 weitere Bits kommentarlos auf 0 gesetzt. [c] A = (1<<AX5) | (0<<AX4) | (1<<AX3) | (1<<AX2) | (0<<AX1); [/c] Aber bei
-
Thread
Verständnissfrage: negierte Bitabfrage in If-Anweisung
Zurück zur Frage: Um in einem beliebig mit Bits besetzen Register auf ein einzelnes Bit zu testen: [c] #define BIT(x) (1U<<x) !!(value & BIT(3)) // liefert 1 (und nur 1) wenn das Bit gesetzt ist. !(value & BIT(3)) // liefert 1 (und nur 1)
1 (und nur 1) wenn das Bit gesetzt ist. Wobei sich die Frage stellt, wo man das braucht. Wenn es schon auf die Zahl 1 ankommt, würde ich das explizit hinschreiben: [c](value & BIT(3))? 1: 0[/c] Wenn es nur die Abfrage
-
Thread
STM32F0: Mit HAL-Lib überprüfen, ob Datenübertragung über SPI abgeschlossen ist?
SPI Optimierung" Genau so möchte ich das auch machen, wie in dem Beitrag beschrieben, also die einzelnen Flags auswerten. Ich möchte allerdings nicht wie du auf Registerebene programmieren und dort die einzelnen Bits abfragen. Denn bei meiner Aufgabe soll ich hauptsächlich auf die Funktionen der
Optimierung" > > Genau so möchte ich das auch machen, wie in dem Beitrag beschrieben, > also die einzelnen Flags auswerten. > > Ich möchte allerdings nicht wie du auf Registerebene programmieren und > dort die einzelnen Bits abfragen. Denn bei meiner Aufgabe soll ich > hauptsächlich auf die Funktionen
-
Thread
[C++] Code-Optimierung auf AVR
? das bit kann doch nur 0 oder 1 sein, damit reicht das else [c] ISR(PCINT1_vect) { static bool update[7]; static uint16_t timer[7]; uint8_t tmp = PINJ; for (uint8_t i = 0; i < 7; i++) {
eventuell noch die 16bit-rechnung rausziehen aus der ISR zum kürzen der maximalen Takte innerhalb der ISR. Ungprüft: [c] ISR(..) { static uint8_t prev =0; uint8_t pin ; uint8_t i,mask,changed ; Pin
-
Thread
DS18B20 gibt keine Daten her
Datentypen. DEine Variablen die die rückgegebenen Bytes des Scratchpad aufnehmen sollen hast Du als [c]unsigned short //(16 Bit)[/c] definiert. Bytes werden aber eigentlich als [c]unsigned char //(8Bit)[/c] definiert. Ich schreibe die 9 Byte des Scratchpad in ein char-Array. Für die Temperatur werte
nicht nur in der Reset-Abfrage, sondern auch in der read: if (Port_one_wire_bus != 0) Wenn da noch andere Bits high sind, ist das immer true.
-
Thread
stm32f411 USART2 will nicht wie er soll
, wo man bei Cube die Usart-Baudrate einstellt? Habe das im ioc nicht gefunden. Hal generiert [c] huart2.Instance = USART2; huart2.Init.BaudRate = 115200; huart2.Init.WordLength = UART_WORDLENGTH_8B; huart2.Init.StopBits = UART_STOPBITS_1; huart2.Init.Parity = UART_PARITY_NONE; huart2
nur das Received-Bit welches sich ändern kann. Sorgfältigerweise muss man noch abfragen ob das richtige Bit gesetzt ist (hier RXNE) sonst greift man evtl. ins Leere. [c] if (LL_USART_IsActiveFlag_RXNE(USART1
-
Thread
Taster abfragen?
ATtiny 2313 angeschlossen (Low-Active) und frage den Status eines Taster mit folg. Funktion ab: [c] uint8_t btn_check(volatile uint8_t *port, uint8_t pin){ if( !(*port & (1 << pin)) ){ return 1; } return 0; } [/c] eine Abfrage mit wie z.B.: [c]if ( btn_check(&BTN_PORT
Hier [C] #define BTN_PORT PORTD [/C] Du musst das PIN Register abfragen, nicht das Port Register
-
Thread
Moduswechsel durch gleichzeitiges Drücken beider Taster
ist eigentlich fast unlesbar. Hier mal ein Beispiel wo die Taster an Port 1.0 und 1.1 hängen [c] if ((P1IN & BIT0)==BIT0 && (P1IN & BIT1)==BIT1) { _delay_cyles(x); if ((P1IN & BIT0)==BIT0 && (P1IN & BIT1)==BIT1) { //tue etwas } } [/c] Das ist eigentlich alles.Ob Du
Beitrag #6104794: > Hier mal ein Beispiel wo die Taster an Port 1.0 und 1.1 hängen > if ((P1IN & BIT0)==BIT0 && (P1IN & BIT1)==BIT1) > { > _delay_cyles(x); > if ((P1IN & BIT0)==BIT0 && (P1IN & BIT1)==BIT1) > { > //tue etwas > } > } > > Das ist eigentlich alles.Ob Du da High
-
Thread
Power-down mit Taster
} } [/C] Die nächsten Aufgaben sind: 1. Abfrage des Tasters in eine Funktion packen. Später kann man dann die Funktion durch ein anderes Verfahren austauschen oder erweitern (Entorellung!) und das getestete
VCC auf Portpin; low-active PORTB |= (1 << PB1); // PB1 auf Ausgang DDRB &= ~(1 << PB2); // Bit loeschen; damit PB2 Eingang PORTB |= (1 << PB2); // Taster an PB2 mit internem Pull-up (auf GND) while(1) { unsigned char schalter = taster_abfrage(); switch(schalter) {
-
Thread
Universelle Tastenabfrage
Laut dem Datenblatt werden die Pullups wie folgt gesetzt. PUEx |= (1<<PUEx1) | (1<<PUEx0); die einzelnen Bits PUEx0 sind im Atmel Studio nicht per defines gesetzt. Spielt aber keine Rolle. Da ich die auch mit 0, 1 etc machen kann. Jedoch geht es so wie ich mir gedacht habe nicht. [c] KEY_DDR &=
return d; }(); }; // <-- Ende Header using VC = VCounter<NumberOfCounters<9>, NumberOfBits<3>>; // hier ggf. ändern int main() { VC c; c << VC::value_type{0x01}; // count-up bit 1 c << VC::value_type{0x01}; c << VC::value_type{0x01}; c << VC::value_type{0x01
-
Thread
AVR für wenig Geld im LAN
>@kay1971 (Gast) Sorry, mit den Pulsen hab ich überlesen..... Du könntest in der timer.c etwas einbauen. Ganz am Ende gibt es die Routine "Timer Interrupt". Diese wird jede Sekunde aufgerufen. Dort könntest du den ganzen Port, oder einzelne Bits wieder löschen. So gibt es nur kurze Pulse
Hier in LCD.c [c]void lcd_write (char data,char cd) { #if USE_LCD_4Bit unsigned int timeout = 0; //Wait until LCD is ready while ((Read_LCD(0)&(1<<BUSYBIT)) > 0 && timeout++ < 500) {};[/c] da wird aufs
-
Thread
STM32 Eingang abfragen
Wenn das aber UND-Verknüpft ist, prüf ich dann jedes einzelne Bit UND? Ist das eine Bitweise-Verknüpfung? Was wäre wenn ich sage: [c] int row = GPIOC->IDR & 0xF; [/c] Schreibt der hier dann die Anzahl der Treffer rein? Wenn das eine Bitweise-Verknüpfung
MB schrieb im Beitrag #4873640: > Wenn das aber UND-Verknüpft ist, prüf ich dann jedes einzelne Bit UND? > Ist das eine Bitweise-Verknüpfung? Ja. > [c] > int row = GPIOC->IDR & 0xF; > [/c] Annahme: row ist 16-Bit groß mit dem Inhalt 0000 0000 1000 0100 row wird UND-Verknüpft
-
Thread
Volumenmessung mit ATmega8, einige wichtige Fragen
und wieder losgelassen und dann Taster 2 gedrückt wird. Richtig wäre: [c] while (abfrage1 == 0 || abfrage2 == 0); [/c] Diese Schleife wird solange wiederholt, bis beide Abfragen gleichzeitig einen Wert ungleich 0 liefern. Die Geschweiften Klammern kannst Du übrigens
sollte, da es eben kein intuitiver Ausdruck ist. Intuitiv wäre (zumindest nach meiner Intuition): [c] while ((abfrage1 && abfrage2) == 0) ; [/c]
-
Thread
Bufferverhalten beim Auslesen des UDR
Ich speichere den wert in eine Variable ab und lösche ihn dann aus dem udr. in der if abfrage setze ich ein beliebiges bit "abarbeitung erledigt" und beziehe es in die abfrage mit ein... also vom prinzip her: "if ((received==0xff) & (abarbeitung erledigt == 0)){bit setzen; sonstiges;}" variable
> bits.. oder?! Nein, UDR ist mehrfach gepuffert (ist in Wirklichkeit ein kleiner FIFO, kein einzelnes Register). Du hast also *VIEL* mehr Zeit zum Auslesen.
-
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
Viele Drucktaster und LEDs ansteuern
LED Anzeigen bekannt, kann aber mehr. Neben 16x8 Matrix LED kann er auch noch einen Haufen Tasten abfragen. Wenn das immer noch nicht reicht, ist er auch noch kaskadierbar. 8 Stck lassen sich über I2C unterschiedlich adressieren. Das sollte wohl langen. https://cdn-shop.adafruit.com/datasheets/ht16K33v110
mir dazu noch einfällt, um den Verdrahtungsaufwand zu minimieren: Eine kleine Platine mit einem I2C-16bit-Portexpander entwerfen und alle IO auf z.B. JST-PH Steckverbinder legen. Vorwiderstand für die LED in jede Leitung, für einen Tastereingang stört der nicht. Weitere Steckverbinder vorsehen für
-
Thread
USB-Stick am Mikrocontroller VNC1L
>Was mir aufgefallen ist: du wertest das Status-BYTE aus. Da sind 2 Bits zum VNC1L Status des FIFOs drin. Das Datenblatt ist dazu eine Katastrophe. Wenn RXF# = 1 ist, ist der FIFO des VNC voll und kann keine Daten mehr annehmen. Abfrage hat sich bewährt, ich habe hier
Hier ist mein Sendecode (noch ohne Status Überwachung, das führe ich noch per Oszi durch): [c] void WriteData(unsigned char wr_byte) { unsigned char stelle, status; SPI_CLK_H; /* 1. Bit */ SPI_CLK_L; SPI_CS_H; SPI_MOSI_H; SPI_CLK_H; /* 2. Bit */ SPI_CLK_L
-
Thread
el Last für einzelne Li Zelle
Batteriekapazitäten auf < 5% genau zu erfassen, ist doch mehr, als ausreichend. 16-Bit-DAC, Konstantstromquelle braucht es nicht: Passender Leistungs-R, Logic-Level-NFET und der übliche 10-Bit-ADC im Standard-µC reichen aus. - Ein guter Logic-Level-NFET schließt den Stromkreis
jeweilige Gerät und Nutzerverhalten simulieren, um aussagekräftig zu sein. Ansonsten kannst du dir die 16 Bit sparen, dann würde schon 8 Bit mehr als ausreichend sein.
-
Thread
ein Bit im Byte auf 0 prüfen
Hallo, für nen PIC16 soll wenn Bit 1 in mybyte auf 0 ist Aktion ausgelöst werden. Richtig so? oder besser anders? [c]if (~mybyte & 0x02) alarm()[/c]
ob er unabsichtlich ein Problem erzeugt hat. Beispiel Klammersetzung: [code] // ??? bittest of BIT #3 or Bit #0 shifted into 3rd bit b = a & 1 << 3; if (a && b || c) { // ??? (a AND b) OR c != a AND (b OR c) } [/code]
-
Thread
Abfrage einer 4*3 Tastatur
Hallo zusammmen , ich habe vor 3 Tagen erst mit dem Programmieren von AVR's in Assembler begonnen und nun suche ich Hilfe. Bei einem größeren Projekt ( Röhrenprüfgerät )möchte ich mit einem Mikrocontroller div. Mess. und Steuerungen durchführen .Da ich absoluter Neuling auf diesem Gebiet bin, habe ich die einzeln Aufgaben erst einmal auf einzelne Programme verteilt, die ich später wenn alle einzeln laufen zu einem Programm zusammen geführt werden sollen . So ist der große Plan ( Bernd hat einen Plan ) . Zur Zeit arbeite ich mit einem ATMega 16 und mySmartUSB MK2 als Programmer und AVR-Studio
-
Thread
Kurzschreibweise
nur eine überflüssige Fehlerquelle ohne Nutzen. Die Abfrage sagt glasklar aus das du nur auf die Gültigkeit des 3. Bits abfragst. [c] if (PIND & (1<<3)) [/c] Die Alternative wäre [c] if (PIND & 0b00001000) [/c] Was dir aber wohl niemand so richtig
hinten fehlte beim Muster eine 0. Das hätte man erkennen können. Hier noch mal korrigiert: [c]if (PIND & 0b00110000 == 0b0001000*0*)[/c] Maske und Muster sind allgemein nicht gleich. Sie sind nur gleich, wenn man ein einzelnes Bit auf Eins abfragt. Zur Maske 0b00*11*0000 gäbe es die vier abzufragenden
-
Thread
Läuft µC auch ohne Bootloader?
richtig verstanden habe, dann kann ich mit [avrasm]sbic[/avrasm] bzw. [avrasm]sbis[/avrasm] die einzelnen Ports abfragen, wenn diese dementsprechend als Eingang definiert sind, oder? Mit freundlichen Grüßen Seikuassi
Frage beantwotert: http://www.mikrocontroller.net/articles/AVR-Tutorial:_IO-Grundlagen#Zugriff_auf_einzelne_Bits Und alle weiteren auch. Unglaublich.
-
Thread
SPI Probleme beim Auslesen
Unterseite. Nochmal zur Idee von Karl-Heinz, die Anzeige des Bitmusters (LS0-3 sind die Register des I2C-Controller): [c] char tmp_ascii[] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; decode_char(tmp_ascii[(bits >> 4)], 1, &LS0, &LS1); decode_char(tmp_ascii[(bits & 0xF)
gleichen aktiven Spalten) ausgibt. Ich habe das Auslesen dementsprechend auf eine mehrmalige Abfrage geändert: [c] for(i=1; i<9; i++) { j=0; while(j<200) { byte_tmp = field_read_row(i); send_disp_bits(byte_tmp, i); waitms(100); j++;} } [/c]
-
Thread
Taster - LED Beispiel
Bit 0), so war das Bit gesetzt. Nun gut, jetzt verstehe ich, warum ich die Verneinung nicht brauche - logisch. [c] a = PINC & (1<<0) [/c] sagt ja aus, dass sich a entsprechend der Änderung des PINC0
[c] /* Fuehre Aktion aus, wenn Bit Nr. 1 (das "zweite" Bit) in PINC gesetzt (1) ist */ if ( PINC & (1<<PINC1) ) { /* Aktion */ } /* Fuehre Aktion aus, wenn Bit Nr. 2 (das "dritte" Bit) in PINB
-
Thread
Probleme bei der Initialisierung eines LC-Displays in C
Ausgabe funktioniert nicht. Ich programmiere mit MPLAB IDE v8.88 einen PIC16f887, PORTB dient als 8-Bit-Datenausgabe. Anbei mein C-Programm in txt.-Datei. Vielen Dank schonmal im Voraus für eure Mühe.
vorsorglich mal gelöscht. Das mit dem "while(Button_LCD_Reset != 1)" verstehe ich nicht ganz. Bin noch C-Neuling^^ Ich mache ja auch eine LCD-busy-Abfrage. Frägt das dann was anderes ab ?
-
Thread
ADC Messung mit dem Attiny 841
Um es einmal zu verstehen und arbeite an einer übertragung mit I2C. Wollte mir nicht gleich die 10 Bit antun. Kannst du mir ein paar Tips geben wenn ich 10 Bit per I2C übertragen will?
Heiner schrieb im Beitrag #6724986: > Kannst du mir ein paar Tips geben wenn ich 10 Bit per I2C übertragen > will? Man überträgt einfach zweimal 8 Bit (ein 10 Bit ADC Wert wird in einer 16 Bit Variable gespeichert, siehe Return-Wert ADCW) da du 10 bit über I2C nicht einfach übertragen
-
Thread
µC reagiert auf falsche Antwort
frage, das funktioniert auch erstmal, wenn das ganze komplett läuft, ersetzte ich dann auch mal die Abfrage eines einzelnen Zeichens mit "string.h". Damit nicht genug, wenn ich jetzt den BTM z.B. "at" sende müsste er mit "OK" antworten was er nicht tut oder ich empfange es einfach nicht. Wenn ich das Modul
AT-Kommandos einfach Full-Speed draufpumpen. Der obige Link zeigt auch, dass man lediglich ein einzelnes CR (\r) schicken sollte. Es kommt dann ein CRLF (\r\n) zurück. Also: [c] Senden ("A"); // 'A' senden Empfangen (); // Auf Echo 'A' warten Senden ("T"); // 'T' senden Empfangen
-
Thread
Conways Game of Live zu langsam auf Z80
vermeiden. Die Z80 CPU ist nicht optimal für C, denn C wurde für CPUs mit mindestens 16 Bits definiert. AVR hat übrigens ähnliche Probleme, das sieht da auch nicht so arg viel anders aus. Entweder man kennt die Regeln und passt sich an, oder man
4B55 EE 80 [ 7] 247 xor a, #0x80 4B57 248 00157$: 4B57 F2 5C 4B [10] 249 jp P,00105$ 4B5A 2E 00 [ 7] 251 ld l,#0x00 4B5C 252 00105$: 4B5C CB 7A [ 8] 254 bit 7, d 4B5E 28 04 [12] 255
-
Thread
24 bit signed in einer 32bit variablen?
MLSB << 8) + LSB; So, jetzt stehen die Bytes an der richtigen Stelle in temp. Dann musst du abfragen ob die Zahl negativ ist. Das Vorzeichen steht in MSB D7. Wenn 1 dann musst du die oberen 8 Bits von temp alle auf 1 setzen. Wenn Null machst du gar nichts. if(MSB & 0x80) temp |= 0xFF000000;
Wenn man nicht wissen will, wo das sign-Bit auf dem Ziel hin muss, überlässt man das einfach dem Compiler: [c] if(signed) { val = val * (-1); } [/c] ...oder habe ich da jetzt was verpasst? [edit] /signed/ muss natürlich durch
-
Thread
Hausbus
nachteilig. Aber ich kann mich irgendwie nicht damit anfreunden ein "Gesamtprogramm" auf viele einzelne µC´s zu verteilen... Wenns nur Licht ein/aus wäre ok... aber wenn ich an An-/Abwesenheitskontrolle, Sprachausgabe (ja etwas übertrieben, ich weiss - natürlich nicht über den Bus, nur die Ansteuerung
bei conrad gibts welche um ca 50 eur, ansteuerbar per i2c. 198369 i2c-leistungsdimmer