-
Thread
DOGM081 Display Fehlersuche *HILFE*
*************************************************** #define FUNCTION_SET_EXT 0x21 // 4bit mode, 1 line, instruction table [0,1] #define BIOS_SET 0x1C // 1/5 bios #define POWER_ICON 0x51 // Booster on, contrast C4 on #define FOLLOWER_CONTROL 0x6A /
DisplayClock (void) { _delay_us (30); // 30µs warten DISPLAY_E_ON; // Clock-Bit auf high _delay_us (0.4); // High muss min. 200ns anliegen DISPLAY_E_OFF; // und jetzt auf low } void DisplayWriteChar (char c) { DisplayWriteData(MESSAGE, c); }
-
Thread
Projekt Fußtreter
Aufgabe: Abfrage, taster 2s gedrückt? wie baue ich eine solche If anweisung? ich mein if ( bit_is_clear ( pinc,2 )) is klar. oder bit_is_set.... aber wie frage ich "dauert der tastendruck n-sekunden ?
[c] if ((bit_is_clear ( PIND,3)) && ( j <= 4)) { j = 1; buildPort ^= (1<<0); } else j = 5; buildPort ^= (1<<4); } warten_ms(200); [/c] Sascha
-
Thread
Controller hängt sich nach sehr langer Zeit auf Ursache?
Nachlässigkeit, die ich mir in der Vergangenheit zu schulden kommen habe lassen, aber wirklich jede einzelne, sei es ein Designfehler von dem ich wusste, sei es eine lasche Implementierung, sei es Abfrage von Fehlersituationen die ich auf 'später' verschoben habe, egal was ... jede einzelne dieser bewussten
Nachlässigkeit, die ich mir in der Vergangenheit zu > schulden kommen habe lassen, aber wirklich jede einzelne, sei es ein > Designfehler von dem ich wusste, sei es eine lasche Implementierung, sei > es Abfrage von Fehlersituationen die ich auf 'später' verschoben habe, > egal was ... jede einzelne dieser
-
Thread
Bitdatenstruktur optimieren
einfachen RLE-Kodierung einiges an Speicher und auch etwas Laufzeit sparen. Da speicherst du nicht jedes Bit einzeln ab, sondern immer nur einen Bitwert zusammen mit der Anzahl an folgenden Bits, die diesen Wert haben. Karl Heinz Buchegger schrieb im Beitrag #2613615: > Tim T. schrieb: > >> uint32_t
ohne alle Bits einzeln anzufassen. Nur je größer diese Metastruktur gewählt wird, desto größer ist die Wahrscheinlichkeit das dort eben doch etwas drin fehlt.
-
Thread
#define 2 Ports auf ein define
Mach Makros, mit denen du die LEDn einzeln bedienen kannst: [c] #define LED0_PORT PORTD #define LED0_DDR DDRD #define LED0_PIN PIND #define LED0_PPIN PIN7 #define LED1_PORT PORTB #define LED1_DDR DDRB #define LED1_PIN PINB #
Die Bits einzeln ansprechen, nicht alle 8 zusammen: [c] #define LED_ON(n) if ((n) < 4) PORTB |= 1<<(n); else PORTD |= 1<<((n)-4) [/c] Keine Sorge wg. Code, bei konstantem n optimiert der Compiler die Abfrage
-
Thread
Funktechnologie > 20.000 Teilnehmer
über ein Funksystem abgefragt werden sollen. > Zu Übertragung: jeder Endknoten soll jede Sekunde 8bit übertragen. Wenn sowieso jeder jede Sekunde seine Daten in die Welt schicken soll, warum willst du die einzelnen Teilnehmer dann noch auffordern und den Funkkanal mit redundanter Abfragerei verstopfen
, und die Teinehmer adressiert sind, dann kann man per Trigger und Selbstautoinkrement das Feld abfragen.
-
Thread
Wie Ports am Besten zusammenfassen?
Ausgabe von Werten: Während ich bei Port A "blind" schreiben kann, muss ich Port B erst einlesen, einzelne Bits manipulieren, und wieder den ganzen Port ausgeben. Wie handhabt man das am Besten? Bzw. wie macht ihr das? Mit freundlichen Grüßen,
Ausgabe von Werten: Während ich bei Port >A "blind" schreiben kann, muss ich Port B erst einlesen, einzelne Bits >manipulieren, und wieder den ganzen Port ausgeben. Nö, einzelne Bits kannst du zumindest bei PORTB über cbi, sbi setzen. Bei PORTF sieht das dann wieder anders aus;)
-
Thread
XP: Checkdisk beim Boot
Das Dirty-Bit kann man via "fsutil" abfragen und setzen: [code] fsutil dirty query c: [/code] [code] fsutil dirty set c: [/code] ...zeigt fsutil an dass das Dirty-Bit gesetzt ist? Falls nicht: Setz es einfach
falsch ist, so what? Beschwere dich bei der Chip. > und beharrst darauf, daß auf WinME > keine 64-Bit-Emulation unter VMware möglich ist. Auf einem 32-Bit WinMe mit einem 32-Bit Prozessor wirst du wohl schwerlich eine 64-Bit Emulation hinbekommen. Woher soll der Proz. plötzlich 64-bit breite Register
-
Thread
Timer ungleichmässig
& .. ist die Abfrage des Ports C PC5 auf 0. Was habe ich wieder falsch gemacht? achim
davon (welches nur noch von diesem Bit abhängt) logisch umdrehen !(PINC & ( 1 << PC5 )) > Wie ist es mit den Klammern. In meinem C-Buch stehen für jede if und > else abfrage ein paar Klammern {} drin
-
Thread
PCF8574 muss mehrfach ausgelesen werden
{ I2CMasterBuffer[i] = 0; I2CWriteLength = 1; // 1 Byte I2C schreiben Transfer I2CReadLength = 4; // 4 Byte lesen I2CMasterBuffer[0] = PCF8574A_ADDR | 0x0E | RD_BIT; // 1. Byte = PCF8574A + Adresse (lesen)
dieses "I2CEngine();"? I2CEngine() stammt aus einer Code-Sammlung von NXP. Die Kommunikation des I2C wir nur durch Interrupthandler übernommen. Ich habe ein Delay zwischen den einzelnen Abfragen eingebaut, was aber nichts gebracht hat... aber schon mal vielen Dank für die ganzen Antworten :)
-
Thread
USART Atmega48 / Atmega88 / Atmega168 Assembler
default im UCSR0C ist UCSZ00=1 und UCSZ01=1. Im Register UCSR0B ist der default für UCSZ02=0 und wir arbeiten darum mit 8-bit character size. Falls Dein code funktioniert muss ich den Fehler woanders suchen. Herzlichsten
Dann besteht da noch die Schwierigkeit, dass wegen 3=0b00000011 [avrasm] sbr r16,3 ; Set bits 0 and 1 in r16 [/avrasm] bits 0 und 1 setzt, während dessen [avrasm] sbi DDRC, 3 ; Port C.3 output - LCD Data/command [/avrasm] nur bit 3 setzt. Für mich war das ein beliebter Fehler und
-
Thread
Erfahrungen bezüglich selbst programmierter Datenbank-Anwendungen
Datenbank-Anwendung sollte nach Möglichkeit lokal auf einem "normalen" PC laufen(momentan Win XP Home 32 Bit, in absehbarer Zeit dann Win7 Home 64 Bit). Da es in diesem Fal auch um die Abrechnung von Geldbeträgen geht, halte ich eigentlich Transaktionen für Sinnvoll. Bislang habe ich Datenbanken immer ohne
generieren. Fred schrieb im Beitrag #2597873: > theoretisch auch die Möglichkeit, das ganze in C++ und > entsprechendem Connector zu programmieren Gehen tut das alles aber viel zu Aufwendig, wenn dann würde ich dir Java (oder C# was dir mehr liegt) empfehlen.
-
Thread
DS18b20 Reset geht nicht
damit sagen? PA0 ist ein #define aus einer Header Datei. Du kannst nicht PA0 (was immer 0 ist) abfragen sondern das Bit 0 (=PA0) aus dem PINA Register. Das ist dein Fehler.
Und fang als erstes damit an, die eine Funktion zu machen, die ein einzelnes Byte ausgibt. Das ist doch grausam, wenn du da jedesmal immer wieder den gleichen Ausgabecode in jeder einzelnen Funktion hast. Eine Stringausgabe ist dann ganz simpel [C] void lcd_string(
-
Thread
Atmega16 + DS18B20 + Timer = LCD Zeichenwirrwarr?
sollte ich eigentlich auf CPU-GND hängen. Ich kann allerdings separat noch eine Masseleitung von der µC-Platine zum Displayrahmen legen, das werde ich auf alle Fälle versuchen! Viele Grüsse und wie immer DANKE euch! Hubert *edit* zum Thema Schaltplan: Es gibt leider noch keinen. Meine µC-Platine
Zuschaltens vom Verstärker kommen beide GND-Potentiale zusammen. (also die des Verstärkers mit der der µC-Platine) Masse ist aber nicht geschalten. Der Ringkerntrafo des Verstärkers hängt an L1 und N (logisch), ich schalte einpolig an/aus. Der µC bekommt seinen Saft entweder über den ISP-Programmer vom
-
Thread
Frage zur DDFS von Lothar Miller
63) of sin_data; constant Sinus_Rom : Rom64x8 := ( x"00", x"03", x"06", x"09", x"0c", x"0f", x"12", x"15", .... x"7c", x"7d", x"7d", x"7e", x"7e", x"7e", x"7f", x"7f"); begin Sign_Quadrant <= Sign & Quadrant; case Sign_Quadrant is -- Sign_Quadrant
Solange die Tabelle komplett durchlaufen wird, ist das relativ einfach: pro Bit Wortbreite und entsprechend angepasster Tabellenlänge sind es 6 dB. Wenn aber der Akku zu kurz ist und die Frequenz zu hoch, dann werden einzelne Tabellenwerte ausgelassen und die SNR nimmt zu. Aber
-
Thread
Ansteuerung Schrittmotor mit ATmega8 macht Probleme
for (b2=0;(b2<130);b2++) { } PORTB=0b00001010; //3.Schritt for (c=0;(c<130);c++) { } PORTB=0b00000010; //3.Halbschritt for (c2=0;(c2<130);c2++) { } PORTB=0b00000110; //4.Schritt for (d=0;(d<130);d
Das Problem sind ja anscheinend nicht einmal die Zeiten... Ich habe probeweise mal den Wert der IF-Abfrage auf <1 heruntergesetzt. Der Motor dreht durch bis in den mechanischen Anschlag und stoppt gar nicht mehr. Eben so als gäbe es diese IF-Abfrage überhaupt nicht. Setze ich hingegen die IF-Abfrage
-
Thread
PWM Signal Senden und Empfangen dann Vergleichen
Paket zu vergleichen und wenn > dann ein Paket richtig übergenben wurde möchte ich ein Impul an den uC > übergeben. Wieso immer Pakete? Da mußt du ja immer zwischenspeichern. Und wenn du ein fehlerhaftes Bit erkennst, dann wird es nicht besser, wenn du danach noch weiter Bits übertragen willst. Wer
Stefan S. schrieb im Beitrag #2579352: > Wie würde ich denn dann ein ganzes Packet abfragen?? Warum? Wenn ein einzelnes Bit kaputt ist, dann ist doch dein ganzes Paket kaputt, oder? Es wird nicht einfach sein, diskret ein ganzes (wie auch immer geartetes) Paket abzufragen, weil ja die
-
Thread
Frage zur Bitmanipulation
[c] wie kann man denn aus einer Variable tmp z.B. Bit3(0b00000100) auf ein anderes Bit eines PORTs übertragen(also z.B. PORTB.1)? if ((tmp & 0b100) > 0) PORTB |= 0b1; else PORTB &= ~0b1
langsamer weil längerer Code. - PORTB wird komplett neu beschrieben, problematisch wenn in Interrupts einzeln andere Bits des gleichen Port gesetzt/gelöscht werden.
-
Thread
AVR Tiny 13, EEPROM schreiben, der Prozessor ist danach "von der Rolle"
und war erstaunt dass auch hier ein Aufruf der EEPROM-Routine erfolgte. Langsames Abbarbeiten der einzelnen Schritte zeigte dann das Problem auf: Die Flags wurden während der Abfrage des Write-Flags durch die Interrupt-Routine verändert, so dass ein Aufruf stattfand, obwohl das Register des Write-Flagsnoch
Computergeneration bekommen möchte, der kann sich ja die erste Chip herunterladen: http://www.chip.de/downloads/c1_downloads_auswahl_15815484.html?t=1331074379&v=3600&s=f4a6f1c2317e6ff2111fbb34356275d4 Mein Bruder hatte die damals gekauft, aber ich kann die nicht mehr finden, ist wohl irgendwann doch ins Altpapier
-
Thread
Raspberry Pi ist da
weiter geht, werden bald die ersten Spiele Produzenten aufspringen und die Demo-Scene hat einen neuen C64, ach was, wir alle haben einen neuen C64. Wär doch was, oder?
Wie wollen Die eigentlich feststellen, ob man mit 85°C Begrenzung übertaktet hat oder nicht? Beim Turbomodus wird schließlich auch das Overvoltage-Bit gesetzt. Also dürfte die Garantie nie verloren gehen.
-
Thread
Probleme mit der Verbindung PWM + ADC
Wie soll das zusammengehen? [C] uint16_t pwmtable_8B[8] PROGMEM = {0, 4, 8, 16, 32, 64, 128, 255}; [/C] Du hast 8 PWM Stufen definiert [C] for(tmp=0; tmp<=255; tmp++){ //255 Stufen bei 8-bit, rauf zählen OCR1A = pgm_read_word(pwmtable_8B+tmp); my_delay(delay); } [/C] versuchst aber 256 auszugeben. Schreib das so doch so [C] uint16_t pwmtable_8B[8] PROGMEM = {0, 4, 8, 16, 32, 64, 128, 255}; #define ARRAY_SIZE(x) (sizeof(x)/sizeof(*x)) [/C] ..
-
Thread
Zeitbasierte Aktionen
ich. Lange habe ich mich gewehrt, und mehr als sourcecode auf einen anderen AVR umzubauen oder einzelne Funktionen umzuschreiben waren nicht drin. Aber ganze Programme zu schreiben da muss ich noch viel lernen.
denn Tip der hört sich sogar richtig gut an. Leider Versuche ich vergeblichst mein 4x20 LCD im 4bit Modus zu initialisieren. Ich habe das LCD per 4bit an den ATmega32 angeschlossen D4-D7 am LCD an PORTA des ATmega PA0-PA3 liegen die Datenleitungen, an PA4 - PA6 die Steuersignale. Dies habe ich auch
-
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
VOLTCRAFT DSO-3062C 60 MHz = baugleich mit?
Windows 7 is the lack of HyperTerminal. So here is how to get HyperTerminal on to Windows 7 (32 or 64-bit). On the Windows 7 box make a new folder under C:\Program Files\HyperTerminal for 32-bit and for 64-bit make a new folder C:\Program Files (x86)\HyperTerminal From a Windows XP box and copy the
Rudi schrieb im Beitrag #2802448: > ich habe mich entschieden dieses Oszi (VOLTCRAFT DSO-3062C) zu kaufen. > Leider finde ich im Netz keinen Anbieter. Ein Tipp Rudi: Telefoniere mal die C-Läden einzeln ab. Deren Bestände können zwar im Normalfall einzeln online abgefragt werden, wenn
-
Thread
Möchte Arduino mit RFM70-S verbinden!?
Befehle' aufnehmen kann? Nein. Das heißt, daß gerade etwas passiert ist und das Modul dies dem µC mitteilen will, dieser also schleunigst per SPI mal den Status abfragen soll, um herauszufinden, was jetzt passiert ist.
Weißt du was ein Register ist? Weißt du dass einzelne Bits in so einem Register spezielle Funktionen und Namen haben? (PRIM_RX z.B.). Im Datenblatt steht was diese Bits bewirken. Im Datenblatt steht wie man die Register schreibt und liest Im Datenblatt
-
Thread
Frage zu Struct
ist 2 Bits breit // All das hat in einer einzigen Byte-Variable Platz. // die 3 verbleibenden Bits bleiben ungenutzt } x;[/c] 2.: [c]struct { unsigned char bStatus_1:1; // 1 Bit für bStatus_1
einzelnes Bit, welches immer nur 'kein Vorzeichen' haben kann. Wozu die Ausnahme? Braucht kein Mensch. Wenn es einen Unterschied zwischen BitFeld1 und BitFeld2 in ... [C] struct Test { unsigned
-
Thread
Erste Schulstunde Microcontroller
wurde am Anfang mal auf high gesetzt, um ihn als Eingang zu benutzen ) und maskierst das gewünschte Bit : [c]#define roterButton 1 // roter Knopf gegen GND auf P1.1 char roteTaste(void) { return (!(P1 & (1<<roterButton))); } [/c] Diese Funktion sollte >0 liefern, wenn die 'rote Knopf Leitung
-----------------------------------------------------------------*/ Die Definitionen für die einzelnen Bits scheinen in der Reg515c.h noch nicht vorgenommen zu sein. http://www.keil.com/dd/docs/c51/infineon/reg515c.h Grüße Fritz M.
-
Thread
Konzept zur Strommessung
40 Bit pro Wechsel an, bei mikrosekunden Auflösung reicht das für fast eine Woche. Wenn du verschiedene Phasen mit fixen Verbrauch hast, machst du pro Phase eine Verstärkerschaltung, die genau TTL 1 ergibt
Fertiggerät also ein seriell auslesnbares Vielfachmessgerät und ein PC, als Selbstbau also ein (24-bit) Wandler am uC.
-
Thread
SPI (DOGL-Display)
noch erklären, aber SDA > wie beim DOGXL? Die Bezeichnungen rühren vom ebenfalls unterstützen I2C-Protokoll her, und sind dort Standart. Siehe auch das von dir verlinkte Datenblatt. LG :)
Daher ist es besser und einfacher vor dem Umschalten von A0 das Ende der Übertragung (SPIF in SPSR abfragen) abzuwarten. MfG Spess
-
Thread
FF/Latch Warnung bei LCD Display
nicht weiß warum?!? Hast Du nach dem Einschalten die Resetzeit abgewartet? Du verwendest den 4-Bit-Modus. Sind die Daten richtig aufgeteilt ("aufgenibbelt") ? Ist der 4-Bit-Modus richtig initialisiert? Duke
Faktor 5 sollte das doch ausreichen. Beim Datentransport sende ich zuerst die höherwertigeren 4 bits, 1us Pause, mit Clock Teiler halt dann um das jeweilige mehr, die niederwertigeren 4 bits, 40us Pause, dann ist die Übertragung abgeschlossen und es kann sofort mit der nächsten Übertragung begonnen
-
Thread
Hilfe Ladereglung Atmega16 Assembler
oO ... Bitte befasse Dich auch mit 16 Bit Zahlen auf einem 8 Bit µC. Dann verstehst Du was es mit SPH,SPL und high(), low() auf sich hat. Das untere Ende vom RAM interessiert den Stack bzw. den µC nicht. Wenn Du zuviel auf den Stack legst
ausgibt. Und auf die 5% Performance Verlust durch den C-Compiler ist gesch.....
-
Thread
µC - Alles auf einmal! (Design-Pattern)
das ist die Generierung des Videosignals. Das ist so zeitkritisch, dass es tatsächlich auf jeden einzelnen Taktzyklus ankommt und dann kommt man mit C nicht mehr weiter. Aber abgesehen davon, fällt mir jetzt nichts weiter ein, was tatsächlich Asm erzwingen würde.
Buchegger schrieb im Beitrag #2545371: > Das ist so > zeitkritisch, dass es tatsächlich auf jeden einzelnen Taktzyklus ankommt > und dann kommt man mit C nicht mehr weiter. Ulrich Radig z.B. hat es in C geschafft[1]. [1] http://www.mikrocontroller.net/topic/101429#882288 Gruß Oliver
-
Thread
Zustand der Eingang-PINs
Hallo, ich möchte gerne den Zustand bestimmter PINs meines µControllers (ATmega8) abfragen. Die Eingänge sind Hardwareseitig durch Pull-Up Widerstände auf Vcc gezogen. Also ich möchte gerne wissen wann ein 0 an den jeweiligen PINs anliegt! kann ich das so machen? [c] if (PORTB
PB1) & (0<<PB2)) Zahl = 1; if (PORTB & (1<<PB0) & (0<<PB1) & (1<<PB2)) Zahl = 2; etc... [/c]
-
Thread
Transistortester AVR
std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT lcd_hw_4_bit.o -MF dep/lcd_hw_4_bit.o.d -c ../lcd_hw_4_bit.S avr-gcc -Wall -DWITH_SELFTEST -DAUTO_CAL -DWITH_AUTO_REF -DREF_C_KORR=12 -DREF_L_KORR=50 -DC_H_KORR=0 -DWITH_UART -DCAP_EMPTY_LEVEL=4 -DAUTOSCALE_ADC
Beitrag #3043125: > Bringen die > handoptimierten Assemblerfiles so viel oder könnte man auch die > C-Version > davon nutzen? Es werden drei Assembler-Files benutzt: lcd_hw_4_bit, swuart und wait1000ms. Davon gibt es keine C-Version. Die wait1000ms Funktion ist nach meiner Meinung auch nicht in C
-
Thread
Assembler, Counter, 7Segment
einfach C? Da musst du dich dann um den ganzen Kleinkram nicht selber kümmern. Dein bisheriges Programm würde in C so aussehen (ohne dein Tastenproblem damit gelöst zu haben) [C] #include <avr/io.h> uint8
LDS Reg_A, Deb_Time CPI Reg_A, 0 BREQ End_Dbnc ; keine Prellzeit gesetzt LDS Reg_C, Time_Flag ; wird im Timer gesetzt ANDI Reg_C, 0b00000010 ; Flag aus Timer bearbeiten BREQ End_Dbnc LDS Reg_C, Time_Flag ; wenn gesetzt, dann ANDI Reg_C, 0b11111101
-
Thread
stm32 Pin im laufenden Programm aktivieren/deaktivieren
Alle Interrupts können auch so einzeln deaktiviert werden: [c] NVIC->ICER[0] = 0xFFFFFFFF; NVIC->ICER[1] = 0xFFFFFFFF; NVIC->ICER[2] = 0xFFFFFFFF; NVIC->ICER[3] = 0xFFFFFFFF; NVIC->ICER[4] = 0xFFFFFFFF; NVIC->ICER[5] = 0xFFFFFFFF; NVIC->ICER[6] = 0xFFFFFFFF; NVIC->ICER[7] = 0xFFFFFFFF;[/c] Jedes einzelne Bit ist ein Interrupt, der Cortex-M3 hat bis zu 256 Interrupts, daher sind es 8*32 Bit. Wie Du den vorigen Zustand sicherst und den Interrupt wieder aktivierst bekommst Du sicher
-
Thread
ATTiny2313 I2C - Master (Peter Fleury) / Slave (jtronics)
Verbindung return Byte0; } //############# Abfrage einzelner Bytes (8 Bits) und anschließend zusammenfügen zu einem Word (16 Bit) void read_Attiny1(void) { i2c_start_wait(Adr_AttinyI + I2C_WRITE); // Adr_AttinyI ansprechen i2c_write(0); //
(); // Byte2 lesen hig = i2c_readAck(); // Byte3 lesen word2 = uniq(low,hig); // 2x 8Bit --> 16Bit i2c_stop(); // stopt I2C Verbindung } //############# Senden einzelner Bytes (8 Bits) und anschließend senden von
-
Thread
Funktioniert diese Schleife?
|= 0x40 PORTC |= 0x40 Zum löschen eines bits: PORTC &= ~0x40 Zum löschen der 4 least significant bits: PORTC &= 0xf0 Konnte man bei AVRs nicht auch direkt auf port-bits zugreifen??? Zu lange her. Was ist hier wohl zuviel: ...
Sorry ... 0x3C ist natürlich genau falschrum, 0xC3 wäre richtig. DDRC & 0xC3 löscht nur die bits, die hinter den Pins PC2-PC5 stecken. Dann wird genau der eine Pin auf Ausgang geschaltet, der Momentan interessant
-
Thread
64Bit Senden, funktioniert zwar, aber wie kann mans effizienter gestallten?
ich versuche mir gerade eine Uhr zu programmieren. Im Augenblick steuer ich die LEDs für jede einzelne Sekunde über eine einzelne switch case Abfrage an. kleines Beispiel: [c] switch (sekunden) { case 1: SPI_MasterTransmit(0x01); SPI_MasterTransmit(0x00); SPI_MasterTransmit(0x00
Der folgende Code sollte die Anforderungen erfüllen: [c] uint8_t temp; uint8_t s = 1; for (uint8_t byte = 0; byte < 8; byte++) { temp = 0; for (uint8_t bit = 0; bit < 8; bit++) { if(sekunden >= s) temp += (1 << bit);
-
Thread
Physikalische Vorgänge in C bzw auf µC realisieren
verträgt. Das bieten aber nur einige µC auf wenigen IOs. > EDIT: ich würde keinen ARM-Cortex basierten uC nehmen, die haben bei > höheren Takten ein nicht mehr ganz so gut vorhersagbares Zeitverhalten > wie übliche 8Bit, durch unterschiedliche
kann man das Biteinschieben noch mit reinbekommen, kommt auf die Realisierung an. Also wirklich nur BIT Laden, Auf Timer warten, Pegel setzen, nächstes Bit holen usw. In der REstlichen Zeit läuft dann der gesamte andere Kram. CanBuffer abfragen, Datenaufbereitung usw. Wie gesagt alles kein Hexenwerk.
-
Thread
PICkit2 blutiger Anfänger ohne ansatzweise Plan.
es ist etwas völlig anderes als C oder gar C++ mit dem man bei wirklich großen Projekten Zwangsläufig konfrontiert wird. Zudem legt man sich damit sehr auf AVR fest, es gibt zwar auch BASIC Dialekte für andere µC, aber die unterscheiden
ist völlig deine eigene Entscheidung. Du hättest ja auch einfach bei der Abfrage auf "C" stellen können... Dann hättest du mit ASM nichts zu tun gehabt. Oder du hättests dir einen der BASIC Dialekte für PIC besorgt und dann in BASIC geschrieben... Das ist alles keine Frage der
-
Thread
Gibt es eine Art Allround-Logik-IC?
Microchip haben (http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en538621). Das ist ein 2 KiBit EEPROM, mit einer internen "Pre-programmed Globally Unique, 48-bit Node Address" und einer einzelnen Datenleitung. Es ist auch Absicht, dass es nicht ein vergleichbarer Speicher mit I²C Schnittstelle
mit 6 bit, die z.B. ein Schieberegister liefert, 64 Stück einzeln selektieren. mfg mf
-
Thread
Programm mit mehrdimensionalem Array
vorhergehende nicht komplett überschreibt. Sorg dafür, dass du immer eine Umwandlung des uint8_t auf 8 Bit bekommst, also inklusive führenden 0-en und teste dann nochmal. [C] void toBin( uint8_t zahl, char *Buffer ) { uint8_t i; for( i = 0; i < 8; i++ ) { Buffer[7-i] = zahl % 2; zahl = zahl / 2; } Buffer[8] = '\0'; } [/C] und diese Funktion benutzt du anstelle von itoa [C] ... lcd_setcursor(0,1); toBin(ausgeben, buffer); lcd_string(buffer); ... [/C] damit solltest du erst mal alle 8
-
Thread
Wie geht man ein Assemblerprojekt an ?
Bastler schrieb im Beitrag #2524160: > In Bits und Bytes zu denken tut kein bisschen weh Das kannst du in C genauso gut wie in Assembler. Aber geh dein nächstes Projekt mal mit einer Zeitvorgabe an. Und überwache mal die Zeit die du wirklich
nicht Jedem wurde es an der Uni als "Allgemeinwissen" eingetrichtert. Und wer mit irgendeinem dieser 8-Bit-Homecomputer aufgewachsen ist, der ist auch nicht mit C konfrontiert worden, sondern mit Basic und ggf. ASM. Tja, wer weder C noch Basic, noch ASM kann, und nur hobbymäßig kleine AVRs programmieren
-
Thread
Problem mit einem Code (Atinny2313)
; [/C] oder [C] stellung = stellung ? 0 : 1; [/C] oder [C] if( stellung ) stellung = 0; else stellung = 1; [/C] Noch ein 2.tes PS In C ist weniger oft mehr. Wenn eine Variable
und ist immer noch gedrückt 4. war gedrückt und ist nicht mehr gedrückt (fallende Flanke) Diese einzelnen Zustände lassen sich jetzt bequem abfragen/durchlaufen. Die Entprellung geschieht dabei durch die ganze Laufzeit des Programms. Die Taster werden hierbei als Active-Low angeschlossen um die internen
-
Thread
Anfänger Microcontroller - bräuchte mal einen rat
komplex. Ein guter Einstieg ist erst mal - tata: ein paar LED an den µC hängen und mit denen spielen. Einzeln ein-/ausschalten, Muster programmieren, Lauflichter, etc. Das ist das kleine Einmaleins der µC-Programmierung.
Timern hat es nichts zutun. Das ist eine (bei vielen komischerweise sehr nachteilige) Eigenschaft der 8bit PICs. Der Takt wird intern durch 4 geteilt. Aber nicht einfach nur so, um zu bremsen, sondern so können manche Dinge in nur einem Systemtakt durchgeführt werden. Als Beispiel muss ein µC aus dem Speicher
-
Thread
Übergabe & Rückgabe eines structs
Beitrag #2518202: > lustigerweise war das sogar mal so. Ich kenne das auch noch, ich habe damals C im Jahr 1984 auf einem UNIX-SYSTEM-V (VME-BUS-)System auf MC68020-Basis von der Pike auf gelernt - natürlich mit einem K&R in der Hand ;-) Viele der späteren Erweiterungen in C (ANSI, C99) sind zwar
blend Funktion von oben kann ein Compiler relativ problemlos inlinen und landet dann anstelle von [c] int main() { RGB gray; gray = blend( black, white, 0.4 ); } [/C] bei [C] int main() { RGB gray; gray.red = black.red * 0.4 + white.red * 0.6; gray.grn = black.grn * 0.4
-
Thread
AES Verschlüsselung mit ARM Cortex M3
Das ich ein Programm schreiben muss das habe ich mir gedacht eine open source "ase.c" und "ase.h" habe ich ich habe nur noch nie uC programmiert :( Empfehlungen für Software bräuchte ich also auch noch. Zur Übertragung: das war wohl schlecht formuliert von mir. gemeint ist,
Firmware upgrade etc.). Wenn Du einen Chip mit HW Crypto Engine suchst, würd ich einen Xmega (128Bit AES) oder z.b. wenn es 32Bit sein sollen: AT32UC3A3256S Im Atmel Studio 5 gibt es fertige Library zur AES Anwendung wenn ich mich nicht täusche.