-
Thread
Hystere-routine mit Psoc -µC
schau doch mal in die datasheets der einzelnen usermodule. da sind beispielcodes dabei wie man den jeweiligen ADC/DAC anspricht. die hysterese sind dann nur noch paar if abfragen
den zweiten Teil dann komplett getrennt. So wie sich das Problem darstellt, hat es auch mit PSoC ansich nichts zu tun. Ist ein reines C-Problem. Gruß - Abdul
-
Thread
Problem mit PWM bei 7-Seg LCD
Ein bitweises Exklusiv-ODER ("^") eines Portregisters mit 0xFF macht nichts anderes als jedes einzelne Bit dieses Registers zu invertieren (jedes Bit wird mit "1" Exklusiv-ODER-verknüpft, es ändert also seinen Zustand unabhängig vom Ausgangswert; aus 0 wird 1 und umgekehrt). Wenn in PORTB vorher 0xBB
eventuell ins Schleudern mit der Portinvertierung. Du musst vor einer Aktualisierung jeweils das Common-Bit abfragen und entsprechend entweder die Bitmaske oder die invertierte Bitmaske an (z.B.) PB6...0 ausgeben. Da darf dann eben kein Interrupt dazwischenhauen. Und genau das ist innerhalb der ISR gewährleistet
-
Thread
Falsche Anzeige nach Spannungsverlust
"system.h"// Beinhaltet grundlegende Definitionen und Funktionen #include "bits.h" // Definiert die einzelnen Bits #include "lcd.h" // Funktionen für das LCD-Display #include "delay.h" // Funktionen zur Zeitverzögerung /* ** Definitionen */ #define B1 (PINA
UCSR1A = 0b00000000; UCSR1B = (1<<TXEN1)|(1<<RXEN1); // Senden und Empfangen UCSR1C = (1<<UCSZ11)|(1<<UCSZ10); // UCSR1B = UCSR1B | 0b00011000; // Ermögliche Empfangen und Senden (Bit3 = 1, Bit4 = 1) // UCSR1C = UCSR1C | 0b10000110; // Setze Frame Format: 8 data (Bit1 = 1
-
Thread
Wittig(welec) DSO W20xxA Open Source Firmware (Teil4) Gesperrt
Flankentrigger der in Abhängigkeit von Low/High eines anderen Kanals steht, so könnte man z.B. bei I2C aufs Start Bit triggern.
noch nicht fertig wärend ich die nächste Flanke anfordere, es wurden Bits verschluckt. Also bitte anpassen, in Zeile 41 von tc_vars.h: [c] #define SPI_DELAY16 175 // >150 us for shifting out a 16 bit value [/c] Zur Sicherheit habe ich in hardware_t.cpp in Zeile
-
Thread
AT91SAM7X schwächelt
AD_WertSPI=0; for (zaehlerSPI = 3;zaehlerSPI >= 1;zaehlerSPI--) { AT91F_SPI_Enable(AT91C_BASE_SPI0); // Einschalten des SPI0 AT91F_SPI_PutChar(AT91C_BASE_SPI0,SendeWert,0); // senden von Wert "SendeWert" = 255 (8bit)/ Dummy Wert AD_WertSPI |= (AT91F_SPI_GetChar(AT91C_BASE_SPI0) & 0xFF); // nur 8bit interessieren nicht die 16bit des Registers AD_WertSPI <<= 8; // Wert in AD_Wert verschieben rprintf("Ergebnis: %x\n",AD_WertSPI);
-
Thread
ad-wert ausgabe an lcd
wie soll ich den ad-gewandelten wert weiter verarbeiten. auf eine Riesentabelle wo ich jedes einzelne bit des wertes abfrage, hab ich eigentlich weniger lust..wären ja etwa 1024 möglichkeiten!!(10Bit A/D) hat jemand von euch schon erfahrungen damit gemacht?? danke schon im voraus für eure mithilfe
Programm immer in der einen Schleife!(NextSub) Meine Überlegung: Du setzt oben ja das Carry Bit.. dann überprüfst du ob es 0 wird. (Dies sollte passieren sobald Hexzahl - 10 = neg. Wert ist) Jedoch bin ich mir nicht sicher ob er dann das Carry Bit wechselt, also von 1 -> 0 oder ob er es einfach
-
Thread
Frequenzmessung, diesmal aber anders...
Was genau willst Du denn messen ? Die Dauer des Paketes ? eine einzelne Periode ? jede einzelne Periode ? Wie hoch muß die Auflösung sein ? Wie auch immer, besorge Dir schon einmal einen Quarz mit 16MHz.
Datasheet lese: welchen timer benutzt du? beim timer 1 kann das problem darin bestehen, das er 16-bit hat - der µC braucht zum lesen und ins register schreiben 2x so lang als beim 8-bit timer... vllt. geht es sich ja mit den zeiten so aus, das du den 8-bit timer verwendest... vllt. hat ich geholfen
-
Artikel
USB-Tutorial mit STM32
Puffer Nr. 0. Im EP0R-Register finden wir dann weitere Informationen dazu, was passiert ist: Das CTR_RX-Bit gibt an, ob ein empfangender Transfer abgeschlossen wurde, und CTR_TX ist für sendende Transfers. Nach dem Abfragen dieser beiden Bits müssen wir sie auf 0 setzen, aber so dass zwischen Abfragen und
Device Descriptor an indem wir ihn zunächst als simples char-Array definieren: Dabei werden die 16bit-Zahlen in einzelne Bytes aufgeteilt, und das Byte mit den weniger signifikanten Stellen zuerst abgelegt (Little Endian). Die Lösung mit dem #define W() funktioniert auch in C ohne ++, ist flexibel,
-
Thread
Wie viel LCD´s kann man gleichzeitig mit dem Atmega32 ansteuern ?
Display { // Alphanumeric LCD initialization // Connections specified in the // Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu: // RS - PORTB Bit 0 // RD - PORTB Bit 1 // EN - PORTA Bit 0 // D4 - PORTB Bit 4 // D5 - PORTB Bit 5 // D6 - PORTB Bit 6 // D7 - PORTB Bit 7 // Characters
Display { // Alphanumeric LCD initialization // Connections specified in the // Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu: // RS - PORTB Bit 0 // RD - PORTB Bit 1 // EN - PORTA Bit 1 // D4 - PORTB Bit 4 // D5 - PORTB Bit 5 // D6 - PORTB Bit 6 // D7 - PORTB Bit 7 // Characters
-
Thread
STM32 CubeMX HAL IRQHandler Channel 1-4
bzgl. Interrupts im Zusammenhang mit der HAL Lib (CubeMX). Mein Timer2 hat 4 Channels. Jeder einzelne Channel soll durch "Capture Compare" ein Interrupt auslösen und einen entsprechenden Code ausführen. Ich aktiviere den globalen Interrupt Handler, welcher so aussieht: [c] void TIM2_IRQHandler
HAL_TIM_IRQHandler(&htim2); /* USER CODE BEGIN TIM2_IRQn 1 */ /* USER CODE END TIM2_IRQn 1 */ } [/c] Mit welcher Funktion kann ich jetzt im globalen Interrupt Handler die einzelnen ChannelX Compares aufrufen? Sprich wenn Channel 2 einen Interrupt auslöst soll auch nur der entsprechende Code im globalen
-
Thread
xmega single ADC-Messung
ADC.CH2.MUXCTRL = ADC_CH_MUXPOS_PIN4_gc | ADC_CH_MUXNEG_PIN5_gc; #endif ADC.CTRLB = ADC_RESOLUTION_12BIT_gc | (ADC_MODE << 4) | (1 << 3);// enable freerun } [/c] Da sind noch einige Besonderheiten drin, die du aber rauswerfen kannst/solltest. Abholen der Werte jederzeit z.B. mit [c] myChannel0 =
Perform one sample to initialize the ADC on the new reference getADC(0); return 1; } [/c] Auch ich lese hier das Ergebnis in einem Rutsch in eine 16bit Variable aus.
-
Thread
40khz mit ESP32 erfassen
bufferL[count] = adc.readADC(0); //bufferR[count] = adc.readADC(1); count++; } } [/c]
knapp 12 Messungen für High ist das zu wenig, finde ich. Also mit 2 Kanäle. wenn ich nur ein Kanal abfrage, dann 24. Dann habe ich mir gedacht, dass der DigitalWrite zu langsam ist. Also habe ich den geändert. Das habe ich hinzugefügt in der cpp: [c] #define IO_REG_TYPE uint32_t //static inline
-
Thread
MCP 23S08 Interrupts "sammeln" möglich?
ein INT gemeldet wird, einfach das PORT-Register auslesen und per XOR mit einer Schattenkopie im uC vergleichen, welche Bits geändert wurden, und die dann abarbeiten. Tipp: Du solltest das PORT-Register nicht erneut abfragen, um eine Schattenkopie zu erzeugen, weil dann schon wieder eine Änderung
dem Extender, den die CPU in der Hauptroutine abfragt und die Tasten pollt. Dann wird quasi jedes Bit (8 Tasten) einzeln auf Änderung getestet...
-
Thread
Rasterelektronenmikroskop Zeiss DSM 960
Bei mir läuft wav2tiff.py durch: Python 2.7.6 32bit Version auf Windows 8.1 Die folgenden Module mit pip installiert: [c] 29/12/2016 23:49 21,054,566 numpy-1.11.3+mkl-cp27-cp27m-win32.whl 29/12/2016 23:46 841,978 scikits.audiolab
Einschalten da, verschwindet aber sofort wenn ich eine Leiterbahn der Versorgung berühre. Dann wieder einzeln die 47uF draufgetan, Rauschen ist dann dauerhaft da. Geholfen hat ein 100uF Elko an der Stelle wo vorher ein 47uF Kerko saß und zwar der hinter dem LDO (C2). Für mich war das jetzt ziemliche Magie
-
Thread
Fehler bei 7-Seg. LED Display mit Attiny 2313
Eingang. Nein. Wenn PD3 Eingang bleiben soll, alle anderen Ausgang, musst du das so schreiben: [c] DDRD = ~(1<<PD3) [/c] >mit einer Bit-Maske gehn? Yo. [c] if ( (PIND & (1<<PD3) ) { // mach was, wenn Pin HIGH } [/c] oder so: [c] if ( !(PIND & (1<<PD3) ) { // mach was, wenn
nicht ganz. Es bedeutet nicht, "..verschiebe bis PD3", sondern verschiebe um 3 Stellen nach rechts: [c] DDRD = (1<<PD3) ; //wird mit #define PD3 3 // steht in der h-Datei für dein AVR // zu: DDRD = (1<<3); [/c] Also: Nimm eine Eins und verschiebe sie um 3Stellen(Bit) nach links.
-
Thread
Invertierter Taster - Wie Code anpassen?
Ok, danke euch zwei! Ich probier das heute abend mal aus. @Thomas: wären dann für die einzelnen Taster die Abfrage [c]( PIND & (0<<PIND0)[/c] korrekt?
> Ok, danke euch zwei! Ich probier das heute abend mal aus. > > @Thomas: wären dann für die einzelnen Taster die Abfrage [c]( PIND & > (0<<PIND0)[/c] korrekt? Nein, "0<<PIND0" gibt immer 0, statt das BIT für den jeweiligen Taster auszumaskieren.
-
Thread
Dynamische "Beschleunigung" bei Encoder-Eingabe
>>6); // bit 1 = direction (+/-) else ed -= 1+(enc_accel>>6); enc_delta = ed; } [/c] Mit dem #define Dynamik lässt sich der "Biss", also die Beschleunigung einstellen. Leider funktioniert
Ich hab jetzt mal die Beschleunigung programmiert, um nen 16Bit-DAC zu setzen. Funktioniert sehr schön. Das Beispiel macht 3 Stufen, man sollte aber erstmal 2 Stufen probieren. Hier nur die Erweiterung zu meinem Code: [c] #include <util\atomic.h> uint8
-
Thread
Intertechno Funksteckdosen per AVR steuern
audacity.sourceforge.net/ Gruß Roland ; ; Intertechno Protokoll ; ; 12 Datenbits + 1 Syncbit ; ; 0-Bit = 1T High + 3T Low + 1T High + 3T Low ; 1-Bit = 1T High + 3T Low + 3T High + 1T Low ; Sync-Bit = 1T High + 31T Low ; ; 1T etwa 360 Mikrosekunden ; ; 4-Bit Familiencode (LSB...MSB) ; 4-Bit Gerätenummer (LSB...MSB) ; 4-Bit Kommando (LSB...MSB) ; ; 0 = 1H ; 1 = 3L ; 2 = 1H/3H ; 3 = 3L/1L X 12 ; ... ; 48 = 1H ; 49 = 31L ; Familiencode: a 0 b 1 c 2 d 3 e 4 f 5 g 6 h 7 i 8 j 9
-
Thread
ATmega16: ADC-Multiplexing geht nicht
AdcVoltage(2); } else if(x ==3) { val= AdcVoltage(3); } return val; } [/c] Warum vorher noch abfragen? Besser: [c] uint16_t val = ADCVoltage(x); [/c] Oder nicht? Ingo
Hallo [c] #include <avr/io.h> #include <avr/sfr_defs.h> loop_until_bit_is_clear(ADCSRA, ADSC); [/c]
-
Thread
Maskierungsprobleme
einen Einfluss auf die Einzelnen Gain's besitzen. Jedoch wenn ich z.B. nur Bit 6 und 1 einschalte am Switch, wird mir schon ein Fehler ausgegben. So besitzt einer der Variabeln GainSen1-4 0x13. Jedoch sollte dies nie passieren und
Beitrag #5639578: > Mit dem Funktionier es. Aber wiso nicht, wenn ich über das gesammte nach > 0x13 abfrage? Du verwechselst | und ||. | liefert eine bitweise VerODERung, || ist ein logisches ODER. Mit ((GainSen1 | GainSen2 | GainSen3 | GainSen4) == 0x13) veroderst Du zuerst alle Bits von GainSen1.
-
Thread
DS18s20 Probleme mit Timer 8051
Also des ist en 16-Bit Timer : 2^16 = 65535 (mit 0 ) wenn ich zum Beispiel 755 uSekunden warten will muss ich rechnen : x = 65535-755 = 64780 in Hex: 0xFD0C " TH0 = 0xFD; " und " TL0= 0x0C; " daher die zeit =) soll
Interrupt 0 auf fallende Flanke konfiguriert. Die Priorität würde mit PX0=1; erhöht. Wenn (wie beim AT89C5131) 4 Prioritäts-Ebenen möglich sind, kann man das niederwertige Bit aus IPL0 einzeln setzen (Register ist Bitadressierbar). Die Bits in IPH0, IPL1 und IPH1 muss man über Maskierung setzen. Meiner
-
Thread
Schachbrettposition Erkennung
spielen will: Entweder die Ausgangsposition von Hand eintragen, oder aus der Grundposition jede Figur einzeln in die Startposition setzen. Hall-Matrix, 2 Multiplexer 3 auf 8, macht 6 Port-Pins am µC. Und eine Taste für Start, natürlich. Reicht.
Irgendwie schon. Mit Multiplexern für Zeile und Spalte kannst du natürlich immer nur den Zustand eines einzelnen Feldes gleichzeitig abfragen. Um alle Felder abzufragen benötigst du eine Subroutine, die alle Spalten und Zeilen durchgeht und jeweils den Zustand des angewählten Feldes in ein Array abspeichert
-
Thread
atmaga2560 + Interrupt + lan = abbruch.
1000 reduziert. Wie wäre es, wenn du nur bis 12 Zählst und bei jedem Durchlauf nur einen Sensor abfragst? [c] DeviceAddress sensor[] = { /*1*/ { 0x28, 0xFF, 0x86, 0x2E, 0x74, 0x16, 0x3, 0xAF } /*2*/ { 0x28, 0xFF, 0x5, 0x72, 0x74, 0x16, 0x3, 0xE0 }, ... }; float temp[12]; ...
Küchentimer, nur mit Zählern statt Zahnrädern. http://thumbs4.picclick.com/d/l400/pict/400660001207_/Kr%C3%A4hender-K%C3%BCchentimer-Hahn-Kikeriki-K%C3%BCchenwecker-Eieruhr-Kurzzeitmesser-Kr%C3%A4ht.jpg
-
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
AVR - Mal wieder ein Wecker
//Alarm} } [/c] PS: Code als *.c anhängen, dann geht auch die Syntaxhervorhebung
die aktuelle Zeit auch in einer Form vorliegen, so dass du sie weiterverarbeiten (zb. in Form von Abfragen auf einen speziellen Zeitpunkt) kannst. Edit: Und fang an, deinen Code vernünftig einzurücken. Das ist kein Luxus, kann aber ungemein hilfreich bei Fehlersuche sein. ... [C] main() {
-
Thread
Unterstützung - eigenes CAN Protokoll
LPC2129 können etwas mit Message-Objekten anfangen (BasicCAN). Ich verwende dafür die erweiterte 29-Bit-Adressierung. Aufgeteilt in <n1> Bits Quelladdresse inkl. einer Broadcast-Adresse, <n2> Bits Zieladresse und die übrigens Bits für Funktionscode und ggf. noch ein paar Parameterbits. In die Parameterbits
8-10Bits würde ich als Absenderadresse und 8-10Bits als Empfängeradresse verwenden. Damit ist es möglich, bestimmte Absender- und/oder Empfängergruppen zu filtern. Die restlichen Bits können dann den Nachrichtentyp
-
Thread
Eingänge PORTC Probleme beim Atmega8
switch...case-Abfrage machen willst, dann maskiere vorher die beiden höchstwertigen Bits aus (also setze sie definiert auf Null). Nur dann kann die Abfrage überhaupt funktionieren. Allerdings kann die ganze Geschichte
als ein Exponent). Wenn du also testen willst, ob Bit 4 gesetzt ist, dann sieht das so aus: if (port_c & (1<<4)) //Bit vier ist gesetzt Mit etwas bool'scher Logik kann man dann auch den entgegengesetzten Fall prüfen. Mehr dazu steht bestimmt in AVR-GCC-Tutorium
-
Thread
W5100 LAN - UDP Verbindung ?
? Im Zusammenhang von IP und Networking nie gehört. Du schreibst in die IP-Adressregister mit [c] spi_write16(0x0500 + 0x000C, 192); [/c] Was soll das 16? Die IP-Adressregister sind aber 4 einzelne 8-Bit Register .... .... verstehe ich nicht .... ich weiss gar nicht wie man über SPI 16
verwenden. Zähle von 0-3 > Du schreibst in die IP-Adressregister mit > spi_write16(0x0500 + 0x000C, 192); > Was soll das 16? Ja das ist natürlich quatsch, Danke! > ich weiss gar nicht wie man > über SPI 16 Bit auf einmal schreiben kann, das Protokoll > hier ist per se nur auf 8 Bit ausgelegt
-
Thread
Erstes größeres Projekt - Multitasking Konzept
/attachment/111803/MdkM.c vorgeschlagen in einzelne Tasks mit jeweils einer State Machine pro task unterteilt. Standardmässig laufen diese im Zustand 'idle', der prüft, ob der dazugehörige Timer abgelaufen ist und wechselt dann
@ Jan K. (jan_k) >Darunter fällt das Abfragen des Sensors über SPI jede Millisekunde (875 >kHz SPI Takt, 4*16 Bit werden geholt). Dieser Prozess wird blockierend >betrieben, ich warte also bis die paar Bytes da sind. Ich dachte mir, >dass
-
Thread
Atmega8 ASM-Unterprogramm funktioniert nur bei Simulation
Read_IO: In Reg_A, PIn(x) ; Irgendeinen Port lesen LDI Reg_B, 0b11111111 ; Bits invertieren, da Abfrage nach GND EOR Reg_A, Reg_B ; damit ist ein gedrückter Schalter auch "1" ANDI Reg_A, 0b00001111 ; ungültige Bits ausmaskieren STS New_In, Reg_A
Read_IO: In Reg_A, PIn(x) ; Irgendeinen Port lesen LDI Reg_B, 0b11111111 ; Bits invertieren, da Abfrage nach GND EOR Reg_A, Reg_B ; damit ist ein gedrückter Schalter auch "1" ANDI Reg_A, 0b00001111 ; ungültige Bits ausmaskieren STS New_In, Reg_A
-
Thread
Strings ohne Null am Ende? Gesperrt
> char achComment[6] = "123456"; // zu lang In C ist das in Ordnung und hat den gewünschten Effekt, in C++ ist es ein Fehler. Dort kommst du um die Schreibweise mit den einzelnen Char- Konstanten wahrscheinlich nicht herum.
Das Blöde an der Stringverarbeitung von C ist, dass sie schon scheitert, wenn man damit einen 8-Bit Datenstrom von einer seriellen Schnittstelle verarbeiten möchte.
-
Thread
ATmega644PA empfängt auf USART1 nur 0-Bytes nach 2 Min
ist zu überprüfen, ob man senden über Uart0 darf. UCSR0A – USART Control and Status Register A Bits: RXC0 TXC0 UDRE0 FE0 DOR0 UPE0 U2X0 MPCM0 while ( (UCSR0A & (1<<UDRE0)) == 0 ) { } Das zeigt dieses Codestück nicht. [c]uint8_t data, stat; stat = UCSR1A; data = UDR1; UDR0 = data;[/c]
Wunsch und trotz meines besseren Wissens habe ich nun den Code wie folgt "sauber" abgeändert: [c] uint8_t data, stat; stat = UCSR1A; data = UDR1; loop_until_bit_is_set(UCSR0A, UDRE0); UDR0 = data; [/c] Ergebnis: Bringt nix, gleiches Ergebnis - immernoch Nullen
-
Thread
Lüftersteuerung mit C
OCR0 = i; > > } > if(i<=255) > { > OCR0 = i; > > } > } [/c] da steht nicht mehr als " [c] OCR0 = i" [/c] Versuch erst mal den Quellcode zu verstehen, den dir dein Lehrer gegeben hat. Dann bekommst du es vielleicht auch hin.
Offenbar 'dead Code' [C] while(bit_is_clear(PIND,0)){_delay_ms(1000);} while(bit_is_clear(PIND,1)){_delay_ms(1000);} while(bit_is_clear(PIND,2)){_delay_ms(1000);} [/c]
-
Thread
eDIP kein 'DC1' in Antwort
... weiter geht es mit der Verteilung der einzelnen Etagen.
Nimm die gedrehten IC-Sockelleisten: http://www.reichelt.de/?;ACTION=3;LA=2;GROUP=C131;GROUPID=3215;ARTICLE=19400;START=0;SORT=artnr;OFFSET=100;SID=22GhRAMX8AAAIAACsiPYQ040218c60ad08b99eb988a5f0fdb54bb Peter
-
Thread
Dublette in unsortiertem Array feststellen
wenn der Wertebereich überschaubar ist, könnte man eine bit-Array anlegen. Und beim durchlaufen das Bit für den Wert auf 1 setzen. Wenn es schon 1 ist, dann doppelt. das sollte dann linear schnell sein.
mit 100 Elementen von Typ unsigned char. Ist also nur ein Byte pro Array-Eintrag. aus 8-Bit eine 16-Bit "Prüfsumme" zu berechnen ist zwar einfach und kollisionsfrei möglich, macht die Sache aber nicht wirklich schneller.
-
Thread
uint128_t mit AVR?
Hallo, Ich braeuchte fuer den AVR eine 128 Bit grosse unsigned integer Variable. Gibt es so etwas? Habe schon inttypes.h und stdint.h durchforstet, hier komme ich bis auf uint64_t :/ Programmiert wird in C mit avr-libc 1.6.8, avr-binutils
else { shift0in(); } shift[counter]=shift[counter]/2; } [/C] taktet keine 8 Bit raus, sondern eine zunächst unbekannte Anzahl an Bits, je nach Inhalt von shift[counter]. Ist shift[counter] zb von vorne herein schon 0, dann wird gar nichts rausgetaktet. Ausserdem
-
Thread
Tastermatrix mit Schieberegistern
Schiebe Register ich habe ja durch die Taster Matrix eine X und Y Leitungen nun kann ich doch vom µC aus die Tastenmatrix über Schiebe Register abfragen hat jemand ne Ahnung wie das geht und was man da für Schiebe register benötigt ? danke schon mal für eure Hilfe µC mit dem alles laufen soll
Spalten zu kommen. Die Matrix hat jetzt 8+8 Kontakte. Die Anschluesse in X-Richtung klemmst du an ein 8-bit Schieberegister mit parallelem Ausgang (74HCT164), die Y-Richtung an ein 8-bit Schieberegister mit parallelem Eingang. Der uC schiebt jetzt immer ein Bit in X-Richtung weiter und fragt nach jedem mal
-
Thread
Physikalischer CAN Bus mit Transceivern aber ohne CAN Controller
. Aber zu Not ist auch ein zusätzlicher µC als I2C/CAN Konverter möglich.
8-bit (Hilfs-)Mikrocontroller wechselten.
-
Thread
Taktvervielfachung - wer hat eine Idee?
auch das Signal zum Richtigen Zeitpunkt wechseln. Das ist denke ich schwieriger. Um was für einen 8-Bit Computer handelt sich es denn? Und was für eine Schnittstelle willst du benutzen. C64?
schrieb: > Kannst Du nochmal ein bißchen mehr zur Aufgabenstellung schreiben? Moin, nee, kein C64, sondern Atari 8-Bit Serie. Es geht darum, mittels eines µP oder auch CPLD (wobei das Neuland für mich wäre...) zum Einen eine Unmenge an TTL/GAL Gräbern zu entsorgen und zum Anderen die Emulation
-
Thread
LCD 4x40 mit 2 Controllern
Oder eben: Ein uC macht alles.
sondern seriell über ein Schieberegister. Neben dem Umstand dass Du dabei diverse Ports an Deinem uC sparst kannst Du jeweils den zustand der Prozessorports abfragen, womit Du den ganzen Master/Slave Aufwand minimieren kannst.
-
Thread
PC-Tastatur mit AVR ersetzen
Moritz Greif wrote: > sowas in assembler wär cool. > > Wie kann man einzelne Bits eines Registers rausbekommen, um die einzeln > in einem Protokoll zu senden? > Hat da jemand einen Ansatz? Du kannst zb. die rotier oder schiebebefehle benutzen um ein Register um 1 Bit
Operation Verwendung für --------------------------------------- ODER Bit setzen UND Bit löschen; Bit zum Abfragen ausmaskieren XOR Bit toggeln (aus 0 mach 1 und umgekehrt)
-
Thread
Nibbler 4 Bit Computer replica
c 0 -gui Target Vendor: LATTICE Target Device: LCMXO2-256HCTQFP100 Target Performance: 4 Mapper: xo2c00, version: Diamond (64-bit) 3.5.1.302 Mapped on: 11/05/15 07:58:09 Design
keine 32 Bit CPU. Es gab noch Weiterentwicklungen AM2903 (Multiplikation, Interface für externe Register), AM29C101 16 Bit kaskadierbar, AM29116 16 Bit nicht kaskadierbar. Ein Beispiel ist auch eine 8Bit CPU
-
Thread
3x LED-PWM-Faden
16-bit Timer zu besitzen. Hat jemand einen Tipp für einen passenden µC für 3*10-bit PWM? Danke! ;)
jna380 schrieb im Beitrag #3780102: > Hat jemand einen Tipp für einen passenden µC für 3*10-bit PWM? Zwei 16Bit-Timer (und damit 4 16Bit-PWM-Kanäle) haben z.B.: Mega1284P Tiny441 Tiny841
-
Thread
Matrix mit 5x Rotary Encoder für STM32 uC
ob die reduzierte Komplexität für das Gesamtsystem und die vereinfachte Programmierung des "Master-µC" das wieder rausholt. Ansonsten ginge bei der Schieberegister-Umsetzung auch ein Daisy-Chain über die einzelnen Input-Platinen. Dann limitiert aber die Verkabelung die maximale SPI-Frequenz.
Es gibt sogar fertige Rotary Encoder mit I²C Schnittstelle. https://learn.adafruit.com/adafruit-i2c-qt-rotary-encoder?view=all Oder nur die Platine mit µC: https://www.duppa.net/shop/i2c-encoder-mini/
-
Thread
PART-DB RW 1.2 Gesperrt
jetzt noch prima wäre, wenn man noch Positionsbezeichnungen eingeben könnte. Also "R24,R25,R23", "C12,C1". Das würde es vereinfachen. Es wäre hier vermutlich nur Sinnvoll jede Position einzeln in der Datenbank zu speichern. Hintergrund ist, dass Layout Programme wie Eagle, eine Bauteilliste erstellen
werden. Nicht > mehr und nicht weniger, und auch nicht mitten in einer Datei drin. Halt > so wie in C/C++, das ist ein ganz simples aber sauberes System. Was ist das anderes, als wenn ganz oben eine einzelne Library eingebunden wird, in dem alle Includes stattfinden? Wenn du in jede Datei die ganzen
-
Thread
Logische Funktion mit Gattern realisieren
Wenn man davon ausgeht, dass a,b,c in einem Register anfallen, sind die oben angegeben Abläufe sinnfrei weil man a,b,c erst auf Register aufteilen muss. Bei mehreren Registern ist eine aufeinander folgende Abfrage, ob ein Bit im jeweiligen Register gesetzt ist, vermutlich nicht langsamer als die Aufteilung auf einzelne Register plus Auswertung. Folgendes bei Bits a,b,c in r1 als 00000abc, mit Bitverdoppelung von Bit c. Benötigt temporär 2 Register (r1,r2) und T Flag bei Porteingabe auf einem PORT bei AVR z.B
-
Thread
for(;;) bedeutung?
Die einzelnen Einträge der Tabelle bedutet: K: Kategorie (zur Referenzierung im folgenden Text) C: Sprache aus der C-Familie P: Entsprechende Sprache aus der Pascal-Familie V: Vollständigkeit der Sprachimplementierung
für Speicheroptimierung / Geschwindigkeit z.B. Atmel AVR4027: Tips and Tricks to Optimize Your C Code for 8-bit AVR Microcontrollers Im Endeffekt was der Compiler aus dem C Code macht. Sprich for (;;) wird vom Compiler "am Besten" umgesetzt.
-
Thread
Statemachine: Toller Artikel und.
ausschließlich über Messages. Das ist dann lediglich die logische Weiterentwicklung der Kommunikation über einzelne Bits (aka "Flags").
Beitrag #8007840: > Das ist dann lediglich die logische Weiterentwicklung der Kommunikation > über einzelne Bits (aka "Flags"). Mit dem Vorteil, dass man sich lediglich in der FSM die den INT empfängt Sorgen um atomare Zugriffe machen muss. Der weitere Transport ist dann INT-sicher und auch für beliebig
-
Thread
CAN-Bibliothek für den at90CAN128 und das AVRStudio
Ok, ich kann meine Frage jetzt selber beantworten. Beim Konfigurieren eines MOB sage ich mit [c]CANIDM4 = (1 << IDEMSK);[/c] dass es mir nicht egal ist, was (11 oder 29Bit-ID) ich empfangen möchte. Was ich empfangen möchte wird mit dem IDE Bit angegeben. [c]CANCDMOB |= (1 << IDE);[/c] Sagt, dass ich eine extended Nachricht (29Bit-ID) empfangen möchte. [c]CANCDMOB &= ~(1 << IDE);[/c] Sagt, dass ich eine Standard Nachricht (11Bit-ID) empfangen möchte. Oder ich lasse diese Zeile weg, wenn CANCDMOB vorher mit 0 initialisiert
-
Thread
SSD1306/1309 Library zum Darstellen von Text auf OLED Displays
> Gleich mal ausprobieren. Für unmodifizierte Displays muß die Adresse 0x78 sein 0x78 = 0x3c << 1 Bit 0 ist für R/W zuständig. Die I²C-Adresse steht in den oberen 7bit.
, #define FONT ssd1306oled_font // set font here, refer font-name at font.h/font.c #define LCD_I2C_ADR (0x78 >> 1) // 7 bit slave-adress without r/w-bit [/c] Als kleines Testprogramm habe ich nur folgende Zeilen: [c] #include <font.h> #include <i2c.h> #include <lcd.h>