-
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
Multitasking mit Assembler
Rolle? Meinst du denn ein Pic, ein ARM oder ein Intel kennt die gleichen Assemblerbefehle wie ein 8 Bit Atmel µC? Selbst innerhalb einer Familie spielt es eine Rolle, denn je nach Chip hat der uU unterschiedliche Timer und unterschiedliche Interrupts.
mit passender Priorisierung. Das ganze in assembler nachzubilden ist ziemlich aufwändig, jeder einzelne Task muß gesichert werden und gewährleistet das die Zeitscheiben auch eingehalten werden. Sinnvoller ist da schon das genannte, denn das paßt erstens in einen µC gut hinein und macht zweitens keinen
-
Thread
Entprellen (kein AVR) Gesperrt
ich habe in einem Buch folgene Rountine zum Entprellen gefunden [c] int i, byteport, oldbyteport; while(1) { byteport = P1IN; // lese Port ein if(byteport != oldbyteport) { // hat sich etwas verändert? if(byteport & BIT2) {
ohne zusätzlichen Register mit 2 Befehlen einzelne Bits entnehmen und wo anders wieder einfügen. Mit AND, n*SHIFT, OR wäre das komplizierter. Und wie gesagt, GCC weiß das. Aber klar 8051 nennt sich ja auch "Bit-Manipulationsprogramm-Maschine".
-
Thread
Fernbedien RC5 Empfänger
rc5_bit = ~rc5_bit; rc5_val <<= 1; if( !(rc5_bit & 1<<xRC5) ) rc5_val |= 1; } } [/C] Sprich: Jede Flanke wird gesampled und das Bit unten hereingeschoben. Frage: Kann das so
Ich habe das so gemacht: [c] toggle_tmp = i >>11 & 1; if(toggle_tmp == old_toggleBit) { i = 200; } old_toggleBit= i >>11 & 1; [/c] Aber so wird jede zweite gedrückte Taste unterdrückt
-
Thread
Flanken abfragen in C; MSP430 Olimex
sowas aussehne soll... Muss ich da die Baud-rate beachten? Der Code sieht bis jetzt so aus: [c] #include <msp430x44x.h> //#include <io430x44x.h> #define B1 P3IN & BIT4 //B1 - P4.4 #define B2 P3IN & BIT5 //B2 - P4.5 #define
ne Flankenabfrage eingebaut. Jetzt würde mich doch aber des mit den Interupts interessieren. [c] #include <msp430x44x.h> //#include <io430x44x.h> #define B1 P3IN & BIT4 //B1 - P4.4 #define B2 P3IN & BIT5 //B2 - P4.5 #define
-
Thread
Frage zum LCD - Header: Pins selber einstellen
ja * a priori keine Beziehung zwischen den Datenbits und den zu beeinflussenden Port-Bits besteht * die einzelnen Bits ja noch nicht mal am selben Port liegen muessen Also muss jedes Datenbit einzeln betrachtet werden. Ist es gesetzt, dann muss auch das vereinbarte Port-Bit am vereinbarten
könnte dann zb. im Code abfragen (ev. sogar mit dem Präprozessor) ob die Ports für Bit0, Bit1, Bit2, Bit3 alle gleich sind, und dann wieder zusammenfassen. Aber auch das artet in Arbeit aus (sowohl für den Programmierer als auch
-
Thread
2 Bit und 6 Bit zu 1 Byte zusammenführen
aufbauen mit folgender Reihenfolge: PD2-PD3-PD4-PD5-PD6-PD7-PB0-PB1 natürlich könnte ich die einzelnen Bits getrennt voneinander abfragen und ggf. im Ergebnis-Byte setzen, aber so viel Zeit hab ich nicht ^^ (außerdem muss es da doch eine schönere Lösung geben) mfg, Johannes
Dafür gibt es keine wirklich schöne Lösung. Das Hauptproblem ist, dass du die Wertigkeit der Bits umgedreht haben willst (oder hast du dich nur ungeschickt ausgedrückt, da oben). Wenn PD2 als Bit7 gesetzt werden soll, bleibt nicht viel übrig außer ABfragen und Bit setzen. Wnn dem nicht so
-
Thread
Lektor für C-Programm gesucht
[c]if (PINC & (1<<PINC0)) { // Abfrage Start signal von Fernbedinung start ++; } ... if (PINC & (1<<PC1)) { // Abfrage Start signal von Fernbedinung reset ++; } [/c] Ist das beabsichtigt
bei den Definitionen käme dann noch ein: [c]#define RUN_START_DEBOUNCE ((PINC&0x01) == 0x00)[/c] Dann würde die If-Abfrage lauten: [c]if(RUN_START_DEBOUNCE){ StartDebounce++; }[/c] Mir hilft es, da ich dann auf den ersten Blick sehe, in
-
Thread
Input Capture Register steuern
ICES1)) > ... > if (TCCR1B &= ~(1<<ICES1)) Falls es noch niemandem aufgefallen ist: Die if-Abfrage ist generell Müll. Denn die Bedingung ist eigentlich gar keine Bedingung sondern ein Bit-Setzen/-Rücksetzen-Befehl. Da sollte man sich nochmal Gedanken machen, wie man einzelne Bits abfragt...
Marius Wensing schrieb im Beitrag #3350472: > Falls es noch niemandem aufgefallen ist: Die if-Abfrage ist generell > Müll. Denn die Bedingung ist eigentlich gar keine Bedingung sondern ein > Bit-Setzen/-Rücksetzen-Befehl. Da sollte man sich nochmal Gedanken > machen, wie man einzelne Bits abfragt
-
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
Überlauf in AVR mit C
Beitrag #7309902: > Bei der Warnung geht es nicht darum, ob der Operator atomar ist, Beispiel: [c] #define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit)) [/c] warning: compound assignment with 'volatile'-qualified left operand is deprecated [-Wvolatile] Warum ist eigentlich auch egal, die
EAF schrieb im Beitrag #7309897: > denn ich weiß, dass |= nicht atomar ist Wen man damit ein einzelnes Bit in SFR <= 0x1F setzt, macht er eine atomare SBI Operation: [c] #include <avr/io.h> int main() { PORTB |= 1; } [/c] avr-gcc -mmcu=atmega328 -O1 test.c avr-objdump -h -S a.out
-
Thread
2 Atmega168 per TWI verbinden
setzt man um den TWI Interrupt zu aktivieren, ich hätte erwartet das dies Bit für TW Interrupt Enable steht. Ich finde die Beschreibung im Atmel DB recht gewöhnungsbedürftig, da die Bits nicht einzeln erklärt sind... Bei den Atmel Beispielen ist es auch so, das dort gleich riesen
Hi >Ich finde die >Beschreibung im Atmel DB recht gewöhnungsbedürftig, da die Bits nicht >einzeln erklärt sind... Schon mal im Datenblatt unter 22.9 Register description nachgesehen? Da wird jedes Bit erklärt. MfG Spess
-
Thread
1602 LCD mit ATmega8535 und Bascom läuft nicht
der zweiten Linie, muss man das BF im 4Bit-Mode abfragen. Die BF Abfrage ist hier nur ein stupider Delay Ersatz, blockiert einfach nur. Läuft mit diversen Displays.... und auch nach einem Reset, ohne Power down. [c] void LCD_Init(void
Befehle zugänglich ist und diese auch > richtig interpretieren kann. Hi, natürlich, wenn man im µC-Programm zu dieser Phase das Bit 7 abfragt, bekommt man ein High. Und so lange sollte dann auch der µC keine Initialisierungsbefehle schicken. Der µC wird "blockiert". Diese Art von Busy-Flag-Abfrage
-
Thread
STM32F103 Wann GOIO_ODR,PIOBSRR und BRR?!
und SBI Befehlen auch, welche der > C-Compiler automatisch einsetzt. Die brauchen dafür keine extra > speziellen Register. so man sich auf einzelne Bits beschränkt.
sogar schneller. Carl D. schrieb im Beitrag #6032103: > so man sich auf einzelne Bits beschränkt. Ja, dieser Vorteil gilt nur für einzelne Bits.
-
Thread
2 mal USART interrupt, wie gestalten?
solltest Dir ansehen, wie eine UART funktioniert und wann sie ihren RX-Interrupt auslöst. Und wenn ein µC einen 8-Bit-Zugriff macht, erfolgt der nicht sequentiell mit einzelnen Bits, sondern das ist /ein/ Zugriff.
Attila C. schrieb im Beitrag #4969071: > Ist das immer noch zuviel "gerödel" für eine ISR? Natürlich nicht, aber die Abfrage mit Index ist langsamer als Abfrage auf einzelne Zeichen. Deswegen meine Bemerkung
-
Thread
Projekt Stoppuhr in 8051 Assembler
@Clemens SETB P1.0 > ;Taster an P1, um Port als Eingang zu haben >abfrage: MOV a,p1 > JB a.0,abfrage Irgendwie unübersichtlich! Taster EQU 28h ;Bit Adressierbarer Bereich ab 25h (8 Bit) Vorschlag! MOV 25h,P1 ;Informationen von Prort 1 in 25h speichern MOV C,Taster ;Taster betätigt? JC abfrage ;Ja! ...
-
Thread
Negierte if_Abfrage - Effekt eines Bit Vergleichs ?
Okay - habe ich verstanden, so glaube ich. Also ALLE Bits werden EINZELN negiert. Das klärt meine Frage an sich. Grüße
John Schmitz schrieb im Beitrag #1723775: > Also ALLE Bits werden EINZELN negiert. Das klärt meine Frage an sich. Alle Bitoperationen arbeiten auf den Bits eines Bytes einzeln. Bitoperationen: & | ~ ^ Alle logischen Operationen liefern entweder 0 oder
-
Thread
C Eingabe Ausgabe frage
die aber nur in fehler endet die sagen das der Befehl nicht vorhabden ist. In assambler kann ich einzelne ausgangsbits setzen mit sbi PORTB,2 Wenn ich diesen befehl in C versuche "einzubetten" bekomme ich nur fehler. Kan das sein das das nicht möglich ist das ich nur komplette Byts ausgeben kann
in C verfügbar. Bits setzen und löschen tut man mit Operatoren wie |, &, ^... Siehe dazu http://www.mikrocontroller.net/articles/Bitmanipulation MfG Mark
-
Thread
Hopf Clock Mouse --> Abfrageprotokoll
die Uhrumstellung ansteht. > Bit3 =1 während MEZ, =0 während MESZ > Bit2 =0 während MEZ, =1 während MESZ Das irgendetwas an die Uhr gesendet wird sobald die Dos Datei eine Abfrage startet kann ich nicht erkennen. Somit fallen
Meldung aus? Welches Betriebssystem verwendest du? mit ntpq kannst du die Diagnose von ntpd abfragen. Die genaue Syntax habe ich nicht exakt im Kopf. ntpq -p ntpq -c rv0 dann kannst du noch die Logs (bzw. Stats) im ntpd.conf aktivieren und siehst so jedes einzelne Telegramm welches empfangen
-
Thread
Wie Code modularisieren bei Zugriff auf Interrupts aus verschiednen Modulen
abzufragen. Die Module werden nicht durch Zauberhand aufgerufen. Da es keine gute Idee ist überlappende Abfragen/Antworten auf I2C zu haben (kann I2C nicht), ist mit Start der Abfrage klar von wem die nächste Antwort kommen muss. Anders ausgedrückt, du musst den Buszugriff sowieso serialisieren. Das kannst
Niklas G. schrieb im Beitrag #7983398: > Nick schrieb: >> weil 16-Bit µC), > > Die STM32 sind keine 16bit-uC. Das war ein Beispiel. Dann halt 64 Bit. Oder eine struct. > Nick schrieb: >> Und das geht nur, wenn die cbf erst nach Behandlung des INTs aufgerufen
-
Thread
IRMP - Infrared Multi Protocol Decoder
genau an 4 Stellen, nämlich Bit21-22 und Bit45-46. Dabei haben die 48 Bits folgenden Aufbau: c = 16 Hersteller (customer) Bits P = 4 Parity Bits s = 4 System-Bits p = 8 Produkt-Bits f = 8 Funktions-Bits C = 8 Datenüberprüfungs-Bits
: A4 A3 A2 A1 A0. Dabei werden die Kommando-Bits und auch das Toggle-Bit weggeschnitten. Die Zeile [c] L_Com += (i_ & 0x3F) | (~i_ >> 7 & 0x40); [/c] sollte wohl C6 C5 C4 C3 C2 C1 C0 speichern, wobei C6 invertiert ist nach dem RC5x-Protokoll
-
Thread
STM32F103: EEPROM Abstürze abfangen
doch immer wieder mal vor, dass meine E2's sich aufhängen und das Programm dann endlos in einer Abfrage eines Events hängen bleibt. Ich benutze die I2C Hardware des Chips, frage Fehler "meistens" ab aber nicht hinter jedem einzelnen Befehl, weil das Programm dadurch sehr unübersichtlich wird und es
); for (i = 0; i < 60000; i++); GPIO_SetBits(I2C_SCL_PORT,I2C_SCL_PIN); for (i = 0; i < 60000; i++); pinstat = GPIO_ReadBit(I2C_SCL_PORT,I2C_SDA_PIN); } while (k-- && !pinstat) if (pinstat) { EE_Init(); return SUCCESS
-
Thread
Virtuelle Karte - Polygon oder Quadrat?
und Mag. Der Daten werden mit 8kHz (Gyro), und 3,2kHz (Acc) fusioniert. Beide AHRS Boards werden einzeln fusioniert und später nmoch weiter verrechnet. Bekommt das Stm32f4 auch noch hin, mit I2C als Schnittstelle? Hinzukommen werden dann noch PID Regler und eine sehr umfangreiche Kommunikation über
>Bekommt das Stm32f4 auch noch hin, mit I2C als Schnittstelle? Der Radio und Fernseher Bus wird das ganze ordentlich ausbremsen. Besorg dir mal Sensoren die per SPI arbeiten. I2C macht auf solchen CPUs einfach keinen Spass und keinen Sinn
-
Thread
PWM für Modellservos
abfragen geht nicht. Deshalb muss das irgendwie mit den Interups gehen.
Hallo... In Assembler, mit AVR-Studio 4. Für C bin ich wohl zu doof... ...HanneS...
-
Thread
Vorstellung und erstes Projekt
_BV(2) | _BV(3); } bool get_a(void) { bool a = PIND & _BV(1); // PD1 abfragen return a; } bool get_b(void) { bool b = PIND & _BV(2); // PD2 abfragen return b; } bool get_c(void) { bool c = PIND & _BV(3); // PD3 abfragen return c; } void set_x(bool
'-Felder zu den GPIO-Cores brauchen wir hier nicht weiter zu diskutieren. Und so bleibt gerade in C nur eines übrig: Port (oder Variable) mit Namen versehen, Bit in _diesem_ Port (oder dieser Variablen) mit Namen versehen. Man hat kein Ausdrucksmittel, um sowas wie [c] #define MeinBit Portadresse
-
Thread
Kleines Problem beim T6963C (Grafik Modus)
oben in der ersten Zeile (1,1) einen Text ausgegeben. Und in der Zeile 5 Spalte 5 möchte ich das Bit 5 setzten: [c] GLCD_Zeichenkette("Multimedia Modul"); Pixel_setzten(5,5,5); [/c] Und das Display sieht folgendermaßen aus: Es ziehen sich von oben nach unten Streifen übers ganze Display
www.mikrocontroller.net/attachment/highlight/16188 Nur leicht geändert, da meine Ausgabe-Funktionen mit 8 Bit arbeiten. Also habe ich die 16 Bit Adresse in zwei 8 Bit Variablen gewandelt und übertrage diese einzeln. Erst Low, dann High. [c] void Speicher_Adresse (unsigned int Adresse) { unsigned char
-
Thread
Library für EA-DOGM Grafikdisplays inkl. Font-Generator
reference Fehler an. Unter anderem init_spi_lcd, font_fixed_8px usw usw. Habe die dogm-graphic.c/.h und die font.c/.h eingebunden. Muss ich die einzelnen Fonts auch in das Projekt einbinden? AVR STudio 5 kopiert dann die dateien in den Hauptordner was ja auch nicht Sinn der Sache ist. Habe die
weiß, aber soweit war ich noch nicht vorgedrungen :-) Bei Clear_Area hatte ich es mir so gedacht: [c] if(columns > (max = (LCD_COL_OFFSET + LCD_WIDTH) - lcd_get_position_column())) [/c] Das funktioniert auch beim löschen einzelner pages, aber nicht bei mehreren...
-
Thread
Yet another AVR-timer question (Plausibilitätsprüfung ob OVF und Interrupt sicher.)
" *tcnt0Value=TCNT0; //TCNT0 einlesen [/c] Wenn der Timer in dem Moment überläuft wo die interrupts ausgeschaltet werden wird die TCNT0-Abfrage den Wert 0 liefern. Damit fehlt dann eine komplette Periode in der Zeitrechnung. Mit Abfrage:
glaube dann wird erstmal der Compare Match ausgeführt, weil der Überlauf ja das Flag gesetzt hat. [c] ISR(TIMER0_COMPA_vect) //32 bit Counter { ctcCounter++; } [/c] Das Wäre zwar in Sachen "genaue" Zeitmessung der Worst-Case, aber dafür wäre ich in der Abfrage wieder beim Standardfall, weder
-
Thread
Ein Bit setzten
weniger Instructions braucht, aber so ist es etwas > weniger Tipparbeit. Bzw. wenn man weiß, dass das Bit sowieso 0 ist kann > man sich das löschen des Bits auch sparen. Die Variante vom TE als auch deine funktionieren aber nicht. Project HC schrieb im Beitrag #4118416: [c] > if(ACSR & (1 << ACO)
da fehlt aber auch die abfrage des ACSR, oder bewerkstelligt bascom die auf magische weise von alleine? aber stimmt, der direkte zugriff auf einzelne bits macht es erheblich übersichtlicher
-
Thread
Tastaturmatrix Entprellen
Schiebeoperation mir so überlegt... 1. COL0 auf Masse und die ROW einlesen -> 1 schieben, das sind dann die Bits 1 bis Bit 4 von der Variable val 2. CLO1 auf Masse und die ROW einlesen -> 4 schieben -> das sind dann die Bits 5 bis Bit 9 von der Variable Val 3. CLO2 auf Masse und die ROW einlesen -> 9 schieben -> das sind dann die Bits 10 bis Bit 14 von der Variable Val Wenn ich in meiner Funktion nur eine Spalte auslese - z.B. so [c] static uint16_t keyscan(void) { uint16_t val; DDRC &= ~(ROW0 |
-
Thread
Fragen zum 8255
Es gibt noch mehr "Modes", PortA läßt sich als 8-Bit In/Out Bus Port verwenden, gesteuert durch Port C Leitungen als Strobe und Ack. Port A und B lassen sich auch als direktionale Ports verwenden, wiederum gesteuert duch Port C Leitungen (wieder Strobes
"Lesevorgang" erhalten bleibt, also wenn man an Port A den Wert anlegt 10011100 dann will man das Bit XXXXXXX0 abfragen ob es ne 1 geworden ist, bleiben die X erhalten oder ändern die sich?
-
Thread
Würfelspiel programmieren in C, leider keine Ahnung wie
diesem Wissen (und dem, wie Du das Programm in den Prozessor bekommst) kannst Du dann anfangen einzelne LEDs über einzelen Schalter ein- und auszuschalten. Danach kommt dann ein einfacher Interrupt-Blinker dran (C-Tutorial). Jetzt musst Du eine Funktion schreiben, welches den Inhalt einer 8-Bit-Variablen
// also Pin 0 auf 0. Dieser Ausgang ist // Low-Active. Hier zaehlt das 0 Bit! // Siehe PDF } } [/C] Wenn damit die mittlere LED im Würfel 0 (und nur diese!) nicht leuchtet, dann hast du entweder einen Verdrahtungsfehler (falscher Port am falschen
-
Thread
C Code ich verstehe den Fehler nicht
status_bcd = BCD_Verarbeiten(BCD_Auslesen()); //Jetzt kann ich den Status des Schalters abfragen } } [/c] [c] //IOVerarbeitung.h //Wert von BCD-Schalter auslesen und in eine Dezimalzahl konvertieren uint8 BCD_Auslesen(void) { buffer = PTGD; buffer = (buffer & 0xf);
status_bcd = BCD_Verarbeiten(BCD_Auslesen()); //Jetzt kann ich den Status des Schalters abfragen } */ } [/C] Fehler da? Wenn nicht, dann wieder einen Teil mit dazu. [C] interrupt VectorNumber_Vtpm2ovf void Timer_ISR() { static uint8 ct0, ct1; uint8 i; SRTISC_RTIACK
-
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
LM75 mit Software TWI auslesen (Atmega 16, C)
Das hier in i2c_try_scl ist Unsinn: [c] while((!SCL) && (start_trials <50)) ... if(!SCL) return 0 ; return 1; ...[/c] Wenn exterene Pullups dran sind, dann könnte das Umschalten des I2C_PORT raus, es reicht dann in der i2c_master_init einmal I2C_PORT &= ~(1<<SDA) drin zu haben.
-
Thread
Pollin 16080 Touch mit ATMEGA32 und BASCOM
eine Form-Tabelle?. Der Display-Controller ist unflexibel, ohne Raster müsste man jedes Pixel einzeln in den Controller schreiben. Für eine einfache Anbindung des Touchs ans Basic. Weil ich Ketten von größer-kleiner Abfragen vermeiden wollte. Die Auswertung (das getroffene Rasterkästchen wird berechnet
durch Versuche meist drauf. Aktuell habe ich mir mal eine Testseite auf dem Display gemacht um einzelne Ports ein und auszuschaleten - rein aus Testzwecken. Eine Frage zum Touch-Rückgabewerte-Raster: [c]Dim Lcd_format(192) As Byte Dim Lcd_form_0 As String * 23 At Lcd_format(1) Overlay Dim Lcd_form
-
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
Atmega2560 mit mehreren Atmega128 vernetzen
Ankerlicht ordne ich den Wert 50(dezimal) zu. Wenn das Ankerlicht eingeschaltet wurde, setze ich nur das Bit7(Wert=128) dazu, dann hat das Ankerbyte den Wert 178. Nun soll der AM2560 so ca. jede Sekunde die 128er (denke mal per I2C) abfragen, und die empfangenen Bytes als Klartext im Display anzeigen. Jetzt
I2C Bus solltest Du über bidirektionale Bus-Treiber entkoppeln. Insbesondere, wenn Du einzelne Controller im Bus schlafen legst, oder mehr als 1 Meter überbrückt werden soll. Funzt ganz gut mit Philips
-
Thread
HD44780+PIC18F25k22 Rise Time Probleme?
Nö, kein Missverständnis. Is ja auch nich mein erstes, wenn auch in C. Peter D. schrieb im Beitrag #5307087: > Kein > Zugriff darf ohne Wartezeit direkt auf den vorherigen folgen. > Insbesondere im 4Bit-Mode ist ein sauberes Init essentiell. Wie geschrieben, alle
Daher habe ich meine LCD-Lib so geschrieben, daß sie nur Bitbefehle benutzt. Viele MCs können einzelne Bits atomar setzen, d.h. ohne Seitenefekte auf andere Bits des selben Ports.
-
Thread
Globales struct; Änderung der Daten innerhalb einer ISR manchmal nicht wirksam
: 1. Datenwort aus dem RAM in ein Register lesen 2. Das Register manipulieren (Bit setzen oder löschen) 3. Register zurück ins Datenwort schreiben. In Deinem Fall besteht also die Zeile [c] tgl_daten.Flag_SQW_Rising = 0; [/c] aus drei mind. Assemblerbefehlen. Wie Stefan Ernst
Struktur habe ich wie Dosmo geschrieben hat nur noch als ganzes volatile gesetzt. Nicht mehr alle einzelnen Bits intern.
-
Thread
String-Ausgabe über UART funktioniert nicht bei PIC 18F
; // Flag löschen PIR1bits.TXIF=0; } [/c] Das ergibt als Ausgabe: "MCOHP." Sieht ganz so aus, als würde er jedes zweite Zeichen weglassen. Christian
Noch ein Versuch: void UART_Zeile_senden(char *zeile) { unsigned char c; // Solange senden, bis Stringende erreicht while((c = *zeile++)) { // Einzelnes Zeichen senden UART_Zeichen_senden(c); } }
-
Thread
AVR DB - oder doch ein Compiler-Fehler?
diese stets gültige Werte annehmen und sich dabei eine Häh? d.H. in deiner Welt darf man nur 8-Bit-Variablen verwenden, wenn man auf einem 8-Bit-AVR unterwegs ist? Es ist nunmal eine Hardware-Limitierung, dass der AVR nur 8 Bit auf einmal schreiben kann. Völlig egal, ob du den in ASM, in C++, oder
var = var ^ 0x30; } [/c] Nur 8-Bit Schreib- und Lesezugriffe. Trotzdem nicht atomisch.
-
Thread
LCD im 4bit Modus initialisieren, funktioniert nicht, C, Atmega8
einem Problem mit dem ich nicht weiter komme. In Sachen Elektronik habe ich wenig Erfahrung, aber C/C++ ist mir nicht völlig fremd. Ziel ist es, ein LCD mit KS0066 kompatiblen Treiber im 4bit Modus mit einem Atmel Atmega8 anzusteuern. Der Betrieb im 8bit Modus ist mir bereits gelungen, aber warum
wie lange die einzelnen Kommandos zur Ausführung benötigen (Execution Time), und auf S. 4 des Datenblatts gibt es den Hinweis, dass die Wartezeit länger als die Execution Time sein oder man das Busy-Flag abfragen muss.
-
Thread
90 LEDs einzeln ansteuern
MAX6954*, der kann allein 128 LEDs und wenn es sein muss noch 32 Tasten gleichzeitig ansteuern/ abfragen, Helligkeit in 16 Stufen regelbar ... Ansteuerung per SPI oder I2C (MAX6955). Gut aber nicht billig. Gruss Uwe
dunkel, mit PWM für die Helligkeit hat das Multiplexen nichts zu tun. Damit man die Helligkeit einzeln regeln kann, muss der uC dafür sorgen, daß sie nur eine bestimmte Prozentzahl der Zeit von MAX7219 leuchtend dargestellt wird. Dazu muss der uC die Information im Speicher des MAX7219 ganz schnell
-
Thread
Frage zum MPLAB C18 Compiler
da natürlich auch eintippen. Für input - output kannst du folgendes definieren: [c] #define bit_set(var,bitnr) ((var) |= 1 << (bitnr)) // Einzelnes Bit setzen #define bit_clear(var,bitnr) ((var) &= ~(1 << (bitnr))) // Einzelnes Bit löschen #define bit_test(var,bitnr) ((var) & (1 << (bitnr))) // Einzelnes Bit abfragen [/c] Im Quellcode kannst du dann so ein Bit von einem Port setzen: z.B. [c] bit_set(PORTB,0); // Bit 0 von PORTB setzen [/c] Wenn du den ganzen PORT setzen willst gehts einfacher
-
Thread
Tastendruck am LCD darstellen
Mach doch die Abfragen der einzelnen Taster jeweils in eine IF-Abfrage. Mal ein bisschen Text, welches den Code ausreichend erklären sollte: anfang gehe zu LCD-Pos.1 Taster1 gedrückt? ja->gib Zeichen aus nein
Der switch ist falsch, weil er immer nur 1 Bedingung auswerten kann. Du mußt aber jedes Bit einzeln abfragen, weil du ja auch jedes Bit einzeln darstellen willst: [c] : : if(!(KEY_PIN &(1<<KEY7))) // Wenn Taste PortD.7 auf LOW
-
Thread
KS0108 GLCD Routinen
es denn mit der Kommunikation aus? Wie schnell ist dein Mikrocontroller? Das Display kann je nach uC recht "träge" sein! Bei mir musste ich etliche NOP's einfügen um die Abfrage des Busybit zu sparen. Gruß Stefan
Hallo! @Christian Hohmann Tausche mal die CSEL Ports um! [c] #define CSEL1 0x04 // CS1 Bit Number #define CSEL2 0x03 // CS2 Bit Number [/c] das war bei mir das Problem! Hat jemand von euch mal mit dem GLCDFontCreator2 gearbeitet?
-
Thread
If Abfrage mit unterschiedlichen Zeiten
[c] if(!(PINC&(1<<PC5))) // Abfrage PC5 LED 5 Grün [/c] willst du hier wirklich den Eingangszustand abfragen, oder den Ausgangszustand wissen und damit dann die LED togglen? Was soll dein
delay mit 0,5s oder 1s >ist. Als Lösung wurde vorgeschalgen, delay auf 1ms zu nehmen und die >einzelnen Ansteuerungen oder Abfragen mehrmals zu machen. Im Text heisst Meinst du das hier? http://www.mikrocontroller.net/articles/Multitasking#Ein_einfaches_Beispiel_f.C3.BCr_den_AVR MfG Falk
-
Thread
2mal16 Analoge eing. erkennen, Geschw. egal, 20-36V
sicher. 1. Gedanke 0/24V (x32) -> Multiplexer(4x8) -> Optokoppler -> 0/5V -> PCF8574P -> IIC-Bus - µC würde das so klappen? gibt es die Möglichkeit nach dem Optokoppler anders an den µc zu gehen, aber wenn ich z.B. nur Empfangen könnte, waär das senden der Adresse(welche der 4x8 Bits ich abfragen
Parallel-Seriell-Schieberegister posten das ich mir das Datenblatt anschauen kann? Wie realisiere ich dann, welche bits ich Abfrage, nehm ich 4x den PCF8574P hat ja jede 8-Bit-Bank eine Adresse, wenn ich 1 Schieberegister habe was mir alles nacheinander gibt, woraus sehe ich, was ich abfrage?
-
Thread
70 Taster an Atmega
70 Tasten könntest du sogar problemlos mit einem 10bit ADC Pin abfragen. Das ganze inkl. "Auswerteschleife" würde nichtmal 1ms dauern.
braucjh man nur 3 Pins. die Andere Variante wär ja matrixaufbau, nur halt nicht direkt an den µC, sondern auch über shiftregister. durch eins schiebt man eine einzelne 1 rein und aktiviert damit eine spalte und ließt dann aus dem parallel-in-serial-out Shifts die Zustände der Tasten dieser Spalte