Gefunden für 16 bit timer timer - Zum Elektronik Forum |
| 1 - Datenverlust -- Datenverlust | |||
| |||
| 2 - Sensor-Ansteuerung und Motorsteuerung mit Endschalter -- Sensor-Ansteuerung und Motorsteuerung mit Endschalter | |||
| Offroad GTI Zitat : Du hast die Ausgänge des µC mit den Eingänge des L293 verbunden, das ist schon mal gut. Allerdings auch mit +5V...das ist schon mal schlecht GerDominator: Zitat : Wie hoch sollte die Spannung an den Eingängen sein? Ich dachte auch 5V. Zitat : Die Eingänge werden doch von dem µC geschaltet... Merkst du den Widerspruch? ... | |||
3 - Displaymenü mit Bascom -- Displaymenü mit Bascom | |||
| Hi,
ich baue mir gerade unter Bascom ein Menü auf einem alphanumerischen 4*20-Display zusammen. Die Encoderauswertung habe ich schon hinbekommen, die Temperaturmessung mit NTCs funktioniert auch wie sie soll. Jetzt habe ich allerdings das Problem, dass Bascom anscheinend viel zu viel Zeit mit dem Case Select verbraucht, da ich nur noch durch das Menü scrollen kann, wenn ich ganz langsam am Encoder drehe. Ansonsten gehen die Variablenänderungen einfach verloren. Ja, ich weiß, mit C ließe sich das bestimmt gaanz einfach lösen... Da blicke ich aber nicht durch, außerdem soll das Projekt in den nächsten _Monaten_ fertig werden
Außerdem habe ich hier ne Vollversion und die möchte ich auch ausschöpfen
Kennt jemand ne bessere Möglichkeit? Code : | |||
| 4 - AVR-Assemblercode von Atmega88 auf -8 umstricken -- AVR-Assemblercode von Atmega88 auf -8 umstricken | |||
| Hi!
Ich möchte mir ein Elektorprojekt nachbauen. Dafür wird ein Atmega88 verwendet, ich habe aber nur den Atmega8 hier. Ich habe schon etwas über die Unterschiede gefunden, blicke aber trotzdem nicht ganz durch. http://www.gaw.ru/pdf/Atmel/app/avr/AVR094.pdf Z.B. meckert der Compiler über "out TCCR0A,r16" Ist irgendwie klar, der Atmega8 hat ja nur einen Ausgang vom zweiten Timer etc. Aber wie schreibe ich das um? Geht das überhaupt, oder war der Atmega88 _statt_ dem 8er nötig? Wäre schön, wenn mir jemand weiterhelfen würde
Code : | |||
| 5 - Parametersuche für AVR? -- Parametersuche für AVR? | |||
Offtopic :Meine Frage wurde also gefunden. Nur leider nicht gelesen.
Scheinbar schlagen hier meine 3 Probleme voll zu (siehe Signatur). Wusel_1, Jornbyte: Und wie bitte bekomme ich aus den Daten, die es bei Atmel gibt und ich von da in xls kopiere, die Abtastrate des ADC raus? Und die Doppelbelegung mit dem OC vom 16 bit Timer? Und die RC-Oszi-Taktrate? Wie? Etwa indem ich erst nach den oberflächlichen Werte was raussuche und mich dann durch Datenblatt und Pinout kämpfe? Also nochmal ganz langsam: Für irgendwas braucht man z.B. 11 normale DIO, davon 8 bit zusammenhängend an einem Port (also 1 Byte + 3 bit), 4 Single ended ADC, 2 komplementäre Ausgänge einer 8bit PWM, mit Pausenzeit 1 16 bit Input capture bei mind. 30MHz 1 externer IRQ 1 Hardware-I2C 20KB Flash, 800Byte Eeprom Also gibt man den ganzen Kram in eine echte parametrische Suche ein, und die sagt einem dann, dass a) man daf... | |||
| 6 - Mehr als 4 Timer realisieren -- Mehr als 4 Timer realisieren | |||
| 1) Kann der WinAVR C - Compiler tatsächlich C++ ?
2) Wie groß wird der Code ? Ich verwende ausschließlich Standard C - das genügt! Zum Problem: Array und dekrementieren - wegen Geschwindigkeit wenn möglich im 8-Bit Bereich bleiben ... alternativ: 1 Zentraler Zähler (in ISR inkrementiert = "jetzt"), Timerwerte[x] beim setzten auf tick[x] = (jetzt + dauer) setzten und in der Hauptschleife mit if "jetzt > tick[x]" abfragen. Vorteil: nur 1 inkrement + 1 Abfrage pro Timer. Achtung: hoher Aufwand bei Überlauf des "jetzt". edit: Wahrscheinlich kannst Du den einzelnen Aufgaben feste Indizes zuordnen - damit wird dann die Verwaltung der Unterroutinen einfacher. z.B. if jetzt > tick[1] work1(); if jetzt > tick[2] work2(); if jetzt > tick[3] work3(); if jetzt > tick[4] work4(); ... [ Diese Nachricht wurde geändert von: hajos118 am 21 Apr 2010 10:16 ]... | |||
| 7 - Countdowntimeranzeiger -- Countdowntimeranzeiger | |||
| Vielleicht meint er damit eine Anzeige, die die Zeit nicht in nur in Sekunden, sondern auch in Zehntelsekunden anzeigt...
Das ist aber recht sinnbefreit. Erstens, weil die Anzeige dann zehn mal in der Sekunde aktualisiert wird und zweitens weil man diese Zahlen eh nicht verwerten kann. Offtopic : Mit Aktualisierung meine ich nicht das notwendige Multiplexen. Edit: Als kleiner Tipp, Vorschlag: Einzeiliges LC-Display, ausgeschlachteter DCF-Empfänger und -Demodulator und einen kleinen µC eigener Wahl. Einige AVRs bieten die Möglichkeit, 32kHz-Quarze anzuschließen. Mit Timern kann man diese Frequenz auf exakt 1Hz runterteilen (das geschieht asynchron zum Systemtakt, der bei größeren AVRs dennoch z.B. 20MHz betragen kann. Mit 16 Bit Timer ist das alles reine Hardwaresache. Man kann auch ein etwas höherfrequentes Quarz als Systemtaktquelle benutzen und diesen Takt herunterteilen. Das System sollte aber desöfteren mit dem DCF-Signal synchronisiert werden, so exakt sind diese Quarze nämlich auch nicht, zumindest ging... | |||
| 8 - rand() beim mega8 -- rand() beim mega8 | |||
| Hallo,
ich will einen Mega8 so programmieren dass er mir Impulse von 1ms Länge in pseudozufälligen Abständen ausspuckt. Die Abstände sollen zwischen 50 und 200ms liegen. Eigentlich eine einfache Aufgabe dennoch hätt ich ein paar Fragen: rufe ich rand() auf, was bekommen ich beim Mega8 dann zurück? Eine 8bit Zahl oder eine 16 bit Zahl? Was mache ich am besten mit Werten die der Zufallsgenerator ausspuckt, die nicht innerhalb von 50-200ms liegen? Verwerfen, oder irgendwie so umrechenen, dass sie innerhalb dem gewünschtem Bereich liegen ? Mir käme es drauf an, dass sich die Zufallsfolge nicht zu schnell wiederholt. Ansonsten, wenn der mikrocontroller nichts sonst zu tun hat, soll ich interupts benutzen, oder doch bloß einfach den timer auslesen und mit dem Sollwert vergleichen ? PS: Wahrscheinlich blöde Fragen, aber ich hab mit den Dingern noch nicht soviel gemacht. ... | |||
| 9 - Atmega32 Frequenz Erzeugen -- Atmega32 Frequenz Erzeugen | |||
| CTC steht für "clear timer on compare-match"
Du lässt also deinen 16-bit-Timer durchlaufen, und hast einen Compare-Wert eingestellt, der irgendwo zwischen 0 und 2^16-1 liegt. Sobald Timer und Compare-Wert übereinstimmen wird der Timer gelöscht, und das Timer1-compare-match-flag gesetzt, sowie falls aktiviert der passende Interrupt ausgelöst. Dann startet der Timer von neuem. Hier kannst du jetzt reagieren, und deinen PWM-Pin toggeln. Durch verändern des Compare-Value kannst du deine Frequenz einstellen. [ Diese Nachricht wurde geändert von: Morgoth am 24 Feb 2009 13:30 ]... | |||
| 10 - Mikrowellecontroller programieren -- Mikrowellecontroller programieren | |||
| Hallo
Wenn du microcontroller programmierst musst du ab und zu einzelne Bits in den Steuerregistern, die meißt ein Byte lang sind, verändern. Da aber ein Byte das kleinste ist was sich addressieren lässt kann man die Bits nicht einzeln verändern, man muss sich 'Tricks' einfallen lassen. Das zum einen bitweise Boolsche Operationen (&, |, !,...) soll heißen (und, oder, nicht,...). Diese vergleichen jeweils ein Bit miteinander. zb: 01010000 | 00001010 = 01011010 Zum anderen sind hexadezimale Zahlen ganz praktisch: Die Ziffern 0-9 werden einfach mit Buchstaben A-F fortgesetzt. Man kann so mit einer Stelle 16 verschiedene Zustände angeben. (statt 10 wie bei dezimalen Zahlen, daher der Name) Zur Kennzeichnung einer hex Zahl schreibt man in C ein 0x davor. Mit zwei Ziffern kann man jetzt schon 16*16 Zustände darstellen (vergleiche 10*10) und das entspricht... hopsala 256, also genau ein Byte. Wenn man also schreibt: (0b heißt natürlich binär) 0x03 heist dass eigentlich 0b00000011 0x00 natürlich 0b00000000 und 0xFF heißt 0b11111111 Auf diese Weise kann man sich Zuweisungen und Abfragen zusammenbasteln, will man zb. Bit 0 (TOV0) des Registers TIFR (Timer Interrupt Flag Register) setzen ohne die anderen Bits zu ... | |||
| 11 - PIC16F688 Probleme -- PIC16F688 Probleme | |||
| Hallo alle
ich habe mal ein wenig mit dem oben genannten Pic etwas experimentieren wollen, und dazu habe ich ein kleines Testprintli gemacht. alle Pins ausser Pin 1,4, 14 sind entweder als Eingang(PORTA),oder als Ausgang(PORTC) besetzt. an PORTA sind die pins über einen 10k Widerstand auf GND geschaltet und auch noch über einen Taster auf 5V. MCLR ist über einen 10k Widerstand auf 5V. Dann habe ich versucht mein erstes Programm zu Schreiben: Code : /**************************************************** Titel: | |||
| 12 - Rechteckgenerator mit ATmega8 \"verschluckt sich\" -- Rechteckgenerator mit ATmega8 \verschluckt sich\ | |||
| Hallo AVR-Experten!
Heute habe ich auch mal ein kleines Problem. Es ist zwar überhaupt nicht kritisch, aber ich hätte es gern prinzipiell geklärt und möchte auch etwas dabei lernen. Kleine Vorgeschichte: Ich habe auf meiner Arbeitsstelle ein kleines Prüfgerät für die Antriebselektronik von Turbomolekularpumpen gebastelt. (Das sind, vereinfacht gesagt, mit 1500 Umdrehungen pro Sekunde laufende Ventilatoren... ) Diese haben zur Rückmeldung ihrer Drehung zwei Hallelemente eingebaut, deren Signale die Elektronik auswertet. Da ich bei der Überprüfung der Steuerteile die angeschlossene Pumpe nur simuliere, muß ich auch diese Hall-Signale nachbilden. Dazu brauche ich einen "Tongenerator", der zwei symmetrische und komplementäre Rechteckfolgen von ~0 bis etwa 4 kHz ausgibt.
Zunächst hatte ich eine Schaltung mit einem 556 gebastelt, die auch prinzipiell funktionierte. Nur war es leider so, daß die Frequenz nach oben hin extrem schnell zunahm. Dabei hätte ich mir schon eine gleichmäßigere Zunahme gewünscht, um im besonders interessierenden Bereich (Signalisierung von Drehzahl > 50 % bzw. Abschaltung der Pumpe bei zu hoher Drehzahl) feinfühliger einstellen zu können. Da hatte ich die Idee, einen (für dies... | |||
| 13 - Interrupt funktioniert nicht -- Interrupt funktioniert nicht | |||
| Moin,
Morgoth hats ja schon beschrieben, Angenommene Taktfrequenz von f_CPU[Hz] und einem 16-Bit-Timer ergibt eine maximale Periodendauer(T[s]) von: [/]fed[/]mixonT_max = (2^16-1)*V / f_CPU Sind für 16MHz gerndet etwas mehr als 4s Periodendauer. Dafür muss der Vorteiler auf 1024 gestellt werden. Sonst greift man, wie ebenfalls erwähnt, auf ne softwaremäßifge Erweiterung, zurück. Timer entsprechend den Angaben im Datenblatt initialisieren. [ Diese Nachricht wurde geändert von: DonComi am 10 Jan 2008 17:38 ]... | |||
| 14 - Hilfe bei DCF Testprogramm -- Hilfe bei DCF Testprogramm | |||
| Moin,
Du ließt und schreibst das 16-Bit-Register für den Timer, dabei hast du einen Fehler gemacht. Beim Lesen muss zuerst das Low-Register, dann das High-Register gelesen werden. Beim Schreiben muss zuerst auf das High-Byte, dann aufs Low-Byte zugegriffen werden, siehe: Zitat : To do a 16-bit write, the High byte must be written before the Low byte. For a 16-bit read, the Low byte must be read before the High byte. (ATmega8-Datenblatt, Seite 77) In deinem Programm: Zitat : ldi work, 0x00 ;rücksetzen des Zählregisters out TCNT1L, work out TCNT1H, work und | |||
| 15 - schaltung die nach 16 stunden betrieb selbstständig ausschaltet? -- schaltung die nach 16 stunden betrieb selbstständig ausschaltet? | |||
| Ja, das würde gehen.
Allerdings würde ich es nicht mit Bascom machen. Da machst da folgendermaßen: Du berechnest die Registerinhalte für den 16-Bit-Timer, sodass du z.B. sehr kleine Frequenzen mit großen Periodendauern bekommst: Frequenz = Taktfrequenz / (Vorteiler * Vergleichsregister) Die Periodendauer ist dann der Kehrwert der Formel. Periodendauer = (Vorteiler * Vergleichsregister) / Taktfrequenz. Das berechnest du so, dass ein grader Wert rauskommt. Dann machst du ne statische Variable / globale Variable, die bei jedem Timer_Compary_Match-Interrupt inkrementiert wird. Nach der Inkrementierung wird sie dann mit einem fixen Wert verglichen. Ist dieser Wert erreicht, wurde sie x-mal hochgezählt. Das musst du eben ausrechnen, welchen Wert sie dann haben muss, wenn 16h vergangen sind. Beispiel: Vorteiler: 1024 OCR-Register: 0xFFFF CPU-Takt: 16MHz größte mögliche Periodendauer: T=(1024 * 0xFFFF)/16*10^6Hz~~4,19s Wenn du die Formel umstellst, dass ein grader Wert herauskommt, dann musst du x-mal deine Variable hochzählen, bis x-mal der Timerwert dem Vergleichswert entsprach. Sry, ich habe grade Formulierungsprobleme ^... | |||
| 16 - Einführung in die Mikrocontrollertechnik -- Einführung in die Mikrocontrollertechnik | |||
| Hallo,
ich sehe das genauso. Es gibt für beide Familien an die 100 unterschiedliche Prozessoren. Diese Teilen sich in Gruppen ein, welche bestimmte gleiche Eigenschaften haben. Also z.Bsp. gibt es die Gruppe wo der interne Datenbus nur 8-Bit hat. Daneben gibt es aber auch neuere Typen mit 16-Bit breitem Datenbus. Beide Gruppen gibt es sowohl bei den AVRs als auch bei den PICs. Die Diskussionen der Beführworter einer jeweiligen Familie geht meist auch nur auf meiner Meinung nach sehr kleinen Details ein, welche eigentlich nicht der Rede wert sind. Man kann mit beiden Familien das selbe Gerät bauen. Meist informiert man sich logischerweise nur sehr detailiert über "seine" Familie und übernimmt Meinungen der jeweiligen "anderen" Familie vom Hörensagen. Auch ich bin dem ein wenig verfallen, da ich halt noch nicht mit den AVRs gearbeitet habe. Ich wollte es zwar immer mal anfangen um mir halt ein eigenes Urteil bilden zu können. Das Problem ist aber, dass wenn man sich erst mal auf einen µC eingearbeitet hat man später nur selten bereit ist zu wechseln. Du wirst dich als automatisch jetzt entscheiden und den Weg weiter gehen mit der Familie deiner Wahl. Und auch wenn ich ein PICianer bin muss ich doch leider gestehen, dass man weit mehr P... | |||
| 17 - Frequenzgenerator 0.5Hz - 4.2khz Ua=5V -- Frequenzgenerator 0.5Hz - 4.2khz Ua=5V | |||
Zitat : Esko hat am 31 Mai 2007 17:09 geschrieben : Achsooo es geht nicht ums erzeugen des Signals sondern ums einlesen. Das ganze wäre doch billiger (und volldigital) über einen Inkrementalgeber und eine Anzeige realisiert. Zitat : Der Timerausgang kann bis zu 16Bit Auflösung haben, das sind sicher genug. Der OP will doch nur ein Rechtecksignal. Dafür ist die Auflösung doch wurscht. Ähm ... billiger als ca. 3 Euro? (1.50 für ATtiny2313 und ca. 1.50 für Poti) Die 16 Bit sind der max. Zählerumfang (=Teilerverhältnis) für den Timer... ... | |||
| 18 - delay mit C bei AVR-Programmierung -- delay mit C bei AVR-Programmierung | |||
| Da das abhängig von der CPU-Taktung ist, kann man deine Frage pauschal nicht beantworten.
Wenn Warteschleifen wirklich eingesetzt werden sollen, dann kann man das am besten und saubersten mit Assembler, in diesem Fall also mit Inline-Assembler machen: Man zählt dazu z.b. ein 16-Bit-Register von einem Startwert bis 0: sbiw xl, 1 brne pc-1 Da man weis, dass sowohl sbiw als auch brne je zwei Taktzyklen brauchen und die Taktfrequenz auch bekannt ist, kann man sich die Zahl im Register X ausrechnen: XH:XL = f_cpu * T/4 (T ist die Periodendauer, also der Kehrwert von der Frequenz, die verzögert werden soll, angegeben in S. Wenn du mit Millisekunden rechnest, hast du einen Bruch durch 4000. Dadurch ergibt sich ein Maximaler Wert für X. Wenn man also eine höhere Verzögerung haben will, muss man zusätzlich mit irgendwelchen Befehlen oder sogar einer Schleife in der Schleife einen höheren Teiler erreichen: ldi r16, 0xff dec r16 brne pc-1 sbiw xl, 1 brne pc-4 Damit erhält man einen recht hohen Teiler -> Die Verzögerung wird recht groß. PS: Sowas macht man aber nur für rel. kurze Verzögerungen, wenn man größere Will, nimmt man am besten den Timer, weil dann das Programm noch weiterlau... | |||
| 19 - 3 x PWM in Bascom -- 3 x PWM in Bascom | |||
| Danke für die Antworten!
Leider ist mir schleierhaft, wie das in Bascom funktionieren soll. Der kennt folgende Timer: - TIMER0 is a 8 bit counter. - The TIMER1 is a 16 bit counter. - The TIMER2 is an 8 bit counter. (hat der 2313 garnicht - mein Fehler...) In der Syntax steht aber nur bei TIMER1 was vom PWM - den hab ich auch benutzt und das geht ganz prima. Jetzt frag ich mich aber, wie ich mit TIMER0 den selben Effekt hinbekommen kann wie mit 1, der ja automatisch die PWM erzeugt. In Bascom vor allem, weil Assembler ist mir echt zu hoch
Stefan Z ... | |||
| 20 - Wie schwierig ist es? -- Wie schwierig ist es? | |||
| Hallo
da muss ich pmtsensors zustimmen. Die einen mögen die Atmels lieber die anderen die PICs und wieder andere versuchen sich an exotischen µC. Ich persönlich habe mit den PICs angefangen. Irgendwie fand ich die "Bibel" für die PICs (www.sprut.de) so genial geschrieben, dass man die Dinger im wesentlichen schon durch das Lesen der Seiten sehr gut verstanden hat. Die Grafiken bei sprut sind verständlicher wie in der Originaldoku. Und es wird auf viele Anfängerfehler (Fallen) eingegangen. Leider find ich die Seiten für die AVRs nicht ganz so verständlich. Desshalb wohl meine Entscheidung zu den PICs. Bei sprut findest du auch Anschlußpläne und Assemblerroutinen für LCDs, Taster oder Drehimpulsschalter. Die Schaltungen und Routinen für ein Standard-LCD haben bei mir auf Anhieb funktioniert. Natürlich solltest du alles genau lesen und verstanden haben. Sonst wird das nix. Vorteilhaft für den Anfänger ist auch, das es bei den 14-Bit-PICs nur 35 Befehle gibt. Die sind schnell erlernt. Nachteilig ist halt, dass man dadurch viele Abfragen etwas umständlich programmieren muß. Auch die ganze Bankumschalterei ist für den Anfang sehr unpraktisch. Ich persönlich komme mit den 14-Bit-Pics (12Fxxx und 16Fxxx) inzwischen recht gut zurecht. Auch das... | |||
| 21 - AT90S2313 - Watchdog -- AT90S2313 - Watchdog | |||
| Timed_Smack:
;Whatever you need to satisfy the internal or external watchdog ;The internal watchdog can be set to 16,32,64,128,256,512,1024,or 2048mS ;This scheme for timed reset is limited to 255mS between resets, but it can ;be used with any of the timeouts above. Resetting a watchdog more frequently ;than is needed, is mostly harmless. ;Just make sure that the value you set the timer to at the end of INIT is ;GREATER than the value you assign for Dog_Chow in EQUATES.INC ;The code to set the watchdog to a particular interval is in INIT.ASM push TEMP ;Some routines that need to use this, ;also need to use TEMP.. lds TEMP,Dog_Food ;How many milliseconds before reset is needed? and TEMP,TEMP ;Is it zero? brne Smack_Done ;Nope, just exit ldi TEMP,Dog_Chow ;Reload the timer for the next occurence sts Dog_Food,TEMP ; wdr ;This code will reset the internal watchdog ldi TEMP,$0D ;000XXXXX Reserved ;XXX0XXXX Watchdog turnoff enable ;XXXX1XXX Watchdog enable bit 1=enable ;XXXXX000 (8) Watchdog timeout, 16mS ;XXXXX001 (9) Watchdog timeout. 32mS ;XXXXX010 (A) Watchdog timeout. 64mS ;XXXXX011 (B) Watchdog timeout. ... | |||
| 22 - LED-Blinklicht mit ATS2313 mittels Timer -- LED-Blinklicht mit ATS2313 mittels Timer | |||
| Hallo @all,
dank Jornbytes Hilfe, bin ich mit meinem LED-Blink-Programm mittels Timer weitergekommen. Da normale, auf Bremsschleifen basierende Programme, die Prozessorzeit unnötig verschwenden ist es ratsamer die Blink-Routinen über den eingebauten Timer laufen zu lassen! Im Folgenden hier Jornbytes Erklärung: Zitat : Also... In den Register/Bit Definitions for the AT90S2313 finest du am Ende folgende Zeilen: .equ INT0addr=$001 ;External Interrupt0 Vector Address .equ INT1addr=$002 ;External Interrupt1 Vector Address .equ ICP1addr=$003 ;Input Capture1 Interrupt Vector Address .equ OC1addr =$004 ;Output Compare1 Interrupt Vector Address .equ OVF1addr=$005 ;Overflow1 Interrupt Vector Address .equ OVF0addr=$006 ;Overflow0 Interrupt Vector Address .equ URXCaddr=$007 ;UART Receive Complete Interrupt Vector Address .equ UDREaddr=$008 ;UART Data Register Empty Interrupt Vector Address .equ UTXCaddr... | |||
| 23 - Datenblatt zu Ic D7537AC -- Datenblatt zu Ic D7537AC | |||
| Hast du deinen Videorecorder ausgeschlachtet ?
4-bit single-chip microcomputer Control of systems with FIP display, such as VCRs, ECRs, microwave ovens, etc. 2Kx8bit ROM / 128x4bit RAM 35 I/O lines UPD7500 SET A subset High withstand voltage output port: 31 Large amount current output port: 16 8-bit timer or event counter 8-bit serial interface Instruction cycle: 3.3us/600KHz Provided with the Ceramic oscillation circuit for system clock Function of storing low source voltage data of data memory Low power consumption: Vdd=2.7 to 6.0V Topt=-10 to +70.C Tstg=-65 to +150.C Aber selbst, wenn das kein maskenprogrammierbarer Typ wäre, die Programmierung dieser 4-Bit Micros von NEC macht nicht wirklich Spaß und die Prögramme laufen ätzend langsam. Taschenrechnerniveau eben. Ich habs 1990 spaßeshalber mal gemacht. ... | |||
| 24 - Manchestercode: Taktrückgewinnung -- Manchestercode: Taktrückgewinnung | |||
| Hallo,
Ich habe hier einen Manchestercode, den ich gerne wieder in Takt und Daten zerlegen möchte. Um Daten und Takt manchesterzucodieren ( ), verknüpfe ich ja beide mit einem EXOR (bzw. EOR).
wie kann ich das umkehren? Hintergrund: Mit einem µC soll ein Manchestercode gelesen werden. Die Frequenzl liegt bei ungefähr 30KHz. Mit dem µC geht es ja recht einfach: Ein Bit wird dargestellt durch eine Flanke. Ich kann bei gegebener Frequenz ja das Signal mit einer Kombination aus 2 Interrupts auslesen: Eine externe Interruptsquelle (z.b. INT0) und das ganze jeweils auf steigende bzw. fallende Flanken triggern lassen. Mit dem Timer taste ich dann alle x µs das Signal ab. Also, darum geht es mir nicht, mir geht es um die schlichte Taktrückgewinnung und "Extrahierung" der Daten. Geht das überhaupt so einfach? So langsam frage ich mich, ob das überhaupt so einfah geht. Ich suche praktisch eine Lösung mit Eingang Manchester und 2 Ausgängen Takt und Daten. Ansonsten halt der µC selber, die Daten soll er so oder so bekommen... [ Diese Nachricht wurde geändert von: DonComi am 1 Aug 2006 19:16 ]... | |||
| 25 - Software PLL mit AVR -- Software PLL mit AVR | |||
Was genau möchtest du? einen Schaltplan für den Brushlesscontroller oder eine Beschreibung der Software? Die Software ist immer noch in Entwicklung, etwas fertiges an dem du nicht weiterarbeiten müsstest kann ich noch nicht anbieten. Die grundlegende Funktion ist aber schon recht stabil. Die Regelung funktioniert grob so: Die Kommutation wird durch einen 16 bit timer durchgeführt der sich jeweils beim compare match resettet und dabei um einen Zyklus weiterschaltet. Die Kommutationsfrequenz ist also durch den Wert eines compare registers definiert (wenn auch auf nichtlineare Weise was aber in dem Fall nicht so tragisch ist) Ich messe dann jeweils die Phasenlage des Gegen-EMK Nulldurchgangs und vergleiche diese mit dem geplanten Kommutationszeitpunkt durch Subtraktion. So erhalte ich den Phasenfehler des Rotors im Vergleich zum Drehfeld. Praktischerweise skaliert der absolute Fehler mit der Drehzahl so das er direkt als Proportinalkoeffizient(mit einem konstanten Gainfaktor multipliziert) im Regler verwendet weden kann ohne dass ich über den Winkelfehler rechnen müsste (wenn man das mal auf Papier schreibt sieht man warum) zudem nehme ich einen kleinen Anteil des Fehlers für die Integralkorrektur so dass der Regelkreis nach kurzer Zeit eine Abweichnug von 0 erre... | |||
| 26 - DMX-Dimmer: DMX auslesen und Phasenanschnitt zu gleich? -- DMX-Dimmer: DMX auslesen und Phasenanschnitt zu gleich? | |||
Ich würde die Zündung der vier Triacs komplett Interruptgesteuert mit einem einzelnen 16-bit Timer machen. Bei einem Nulldurchgang der Netzspannung resettest du jeweils den Timer per pin-change Interrupt. Dabei kannst du auch jeweils gleich den maximalen Timerwert speichern der einem halben Zyklus der Netzfrequenz entspricht. Die Zündwinkel der Triacs arbeitest du mit dem Timer sequentiell ab, angefangen mit dem kürzesten. Du setzt jeweils den Timerwert für den nächsten kommenden Zündwinkel in ein timer compare register das dir einen Interrupt gibt wenn es so weit ist, in der Interruptroutine zündest du den(die) entsprechenden Triac(s) und schreibst den nächsten kommenden Wert ins timer compare register und so weiter. Beim nächsten Nulldurchgang wieder den Timer resetten und das Spiel geht von neuem los. So verbrauchst du nur einen 16 bit Timer und kannst im Hauptprogram irgend etwas anderes machen wie z.B DMX-signale analysieren ohne Timingprobleme zu bekommen. [ Diese Nachricht wurde geändert von: photonic am 12 Jun 2006 16:58 ]... | |||
| 27 - timer bei 89c51RD2 -- timer bei 89c51RD2 | |||
| hallo
ich benütze Timer 0 ,1 und externen interrupt 0 Timer 0 und externen interupt 0 funct nur der timer 1 läuft nicht weg. benütze Keil C51 stimmen die serviceroutinen deklarationen so: //Interruptservice Routine für externen Interrupt an P3.2 void ex0isr(void) interrupt 0 using 3 { TR0 = 0; //Timer 0 stoppen Messung(); // } //_________________________________________________________ //Interruptservice Routine für Timer0 Überlauf void isrT0 (void) interrupt 1 using 3 { put_string_lcd("Fehler"); //Fehler = 1; //bei timerüberlauf Fehler =1 TR0 = 0; } //_________________________________________________________ //Interruptservice Routine für Timer1 Überlauf void isrT1 (void) interrupt 3 using 3 { put_string_lcd("messen"); Messimpulsinit(); } bzw die timer initalisierung: TMOD = TMOD & 0x00; //Timer 1 auf 0001, timer 0 modus 1 16 bit timer gate 0, TMOD = TMOD | 0x11; IT0 = 1; // interrupt 0 type control bit Flankengesteurt EX0 = 1; //enable external interrupt 0 EA = 1; // disable all interrupt low aktiv!! ET0 = 1; //ET1 = 1; //timer überlauf IE0 = 1; //external interrupt 0 edge flag IT1 = 1... | |||
| 28 - 89C51 C Laufzeitmessung -- 89C51 C Laufzeitmessung | |||
| Hallo Leute
Ich möchte mir eine Laufzeitmessung mittels µC realisieren. Bei einem Tastendruck soll ein startimpuls ausgegeben werden und gleichzeitig fängt der timer 0 zum zählen an. Wenn am Externen interrupt eine negative flanke ansteht soll er den timer 0 stoppen und die beiden bytes vom timer ausgeben auf 16 leds. dieser wert müsste dann meine zeit sein (Abhängig von der taktfrequenz und denn clocks)? Nur leider funct das ned so wirklich. Vielleicht könnte ja jemand kurz über meinen Code drüberschauen und mir ein paar tipps geben. Wär wirklich super, probiere jetzt schon seit 2 tagen und mach leider keine fortschritte. #include <reg51.h> int i,j,HighByte,LowByte,Selbsthaltung; char Fehler; sbit Taster = P0^0; sbit Messimpuls = P0^1; void Messung (void); void ex0isr(void) interrupt 0 { TR0 = 0; //Timer 0 stoppen Messung(); // } void isrT0 (void) interrupt 1 { Fehler = 1; //bei timerüberlauf Fehler =1 } void main (void) { Messimpuls = 1; Taster = 1; TMOD = TMOD & 0xF0; //Timer 1 auf 0000, timer 0 modus 1 16 bit timer gate 0, TMOD = TMOD | 0x01; IT0 = 1; // int... | |||
| 29 - Mit Microkontroller Frequenz Messen -- Mit Microkontroller Frequenz Messen | |||
| Hallo,
der µC hat 3 16-Bit Timer/Counter. Aber wenn Du das Interruptverhalten auf Flankengesteuert setzt, und sofort den Counter ausliest und den Counter auf Null setzt, sind die Bedingungen immer gleich. Der Counter wird entsprechend dem Teilerverhältnis stets incrementiert. Egal was Dein Programm macht. Aber Du mißt eine Zeit, und keine Frequenz. Wenn der Timer eine Breite von 16 bit hat, wäre es sinnlos, diesen nicht in voller Breite auszunutzen. Wertebereich hier 0 bis 65536. Bsp. : Um 10 ms zu messen, werde ich die Clockfrequ. und den Vorteiler so einstellen, das ich auf 50 000 Counterincrements komme. Und nicht auf 100. Die Meßunsicherheit wäre dann zu groß. Um ungültige Ergebnisse auszuschließen,wäre es sinnvoll den TimerOverflowInterrupt auch zu benutzen.
Ein Excel-Sheet dewegen, weil Excel auch durch Eingabe von Formeln rechnen kann. So kann man für jede gemessne Zeit sich die Frequenz anzeigen lassen und entsprechend der Bewertungskriterien festlegen ob der Ton richtig ist. Dein Prg. müßte dann anzeigen: E-, E oder E+ für die betreffende Saite. Hast Du ein besseres Datenblatt ? Ich hab mir das PDF von Atmel heruntergeladen, da steht nicht viel dri... | |||
| 30 - AVR PC verbindung, hab kein peil... -- AVR PC verbindung, hab kein peil... | |||
| hallo zusammen,
ich hab ein problem. ich fersuche einen clock hinzukriegen aber ich komm irgendwie nicht an eine ordentliche zeitnahme. also ich möchte einen ausgang immer zu einer bestimmten zeit ein und ausschalten. zuerst hab ich es geschafft mit der time funktion einen tackt in 1 sekunde hinzukriegen. einfach mal erklärt: schleifenanfang.. variable= second(time) solange wie variable sich nicht endert gehe zur schleife. clock ausgeben abbruchbedingung zum schleife nach xx sekunden zu beenden. zurück zu schleifenanfang. da ich so nur 0.5 Hz hinkriege ist das ein bissl scheisse
so das ganze nun mit (timer) statt time gemacht. timer ändert sich genau 64 mal pro sekunde.. also würde diese schleife den clock ein/aus schaltet ich einen clock hinkriegen der 32 nal pro sekunde 1 ist. das wären also 32bit/s die ich senden/empfangen könnte. da pro 8 bit 8 adressbits+befehlbits hinzukommen sind das ganze 16 datenbits pro sekunde. heisst also ich würde wenn ich 100 datenbytes senden empfangen möchte brauch ich ganze 50 sekunden....
lange rede kurzer sinn.. kennt wer eine funktion mi... | |||
| 31 - PIC 16F84A -- PIC 16F84A | |||
| hi u37,
nun der RA4 des PIC's stellt keinenfalls einen Zähler dar, sondern ist lediglich die Möglichkeit den Timer0 von extern zu takten. Beim 16F84 hast Du nur den Timer0 zur Verfügung, dieser ist 8 Bit breit, also kann er 256 Zählungen machen bis ein Überlauf stattfindet. Welche Zeitspanne das ist, ist abhängig von der Taktung der CPU, bzw. des externen Takteingangs. Aber prinzipiell mal gefragt. Welche Zeitspanne mußt Du mit der Messung denn abdecken? Bist Du auf den 16F84 fixiert oder wäre auch ein anderer PIC denkbar. z.B. 16F818 (verwende ich als Standardtype). Der hat 3 Timer, einen davon als 16-Bit-Timer. Eine Beschreibung des 16F84 hast Du? http://ww1.microchip.com/downloads/en/DeviceDoc/35007b.pdf [ Diese Nachricht wurde geändert von: baggerfan am 22 Aug 2004 8:50 ]... | |||
| 32 - ATMega16 Counter in C zu langsam -- ATMega16 Counter in C zu langsam | |||
Zitat : Magni hat am 11 Aug 2004 13:16 geschrieben : Hi, ich aktiviere den Timer/Counter0 (8-Bit) mit diesem Code: // Takt / 256 TCCR0 = _BV (CS02); // Als Interrupt konfiguriert timer_enable_int (_BV (TOIE0)); Ist OK Zitat : Das Signal wird hier eingefangen: /****** Der 8-Bit Timer/Counter0 Interrupt *****/ SIGNAL (SIG_OVERFLOW0) { CounterNull++; } Der ATMega16 läuft mit 4 MHz! Bist du da sicher ? Standartmäßig sind 1MHz aktiviert. | |||
| 33 - Wie kann ich meine Anzeige mit einem Microcontroller realiesieren? -- Wie kann ich meine Anzeige mit einem Microcontroller realiesieren? | |||
| Quote:
------------------------------------------------------------ Leider habe ich nicht die Zeit, bzw. will sie mir nicht extra nehmen um mich genau einzuarbeiten. ------------------------------------------------------------ @ Jornbyte: Recht hast Du ! Habe auch schon mal so was für einen mopedfahrer gemacht mit einem Controller. Ja was hast Du denn ? vierzylinder viertakt ! Die Sache programmiert und dann hat der doch an seiner Kiste eine Doppelzündspule ! Also halbe Zündfrequ. als ein Auto. Na lustig, alles neu schreiben, da durch benutzung des Interrupts der 8-bit Counter ausgelesen wurde. Und da gibt es nicht viele passende Möglichkeiten bei gängigen Quarzfrequ. den Timer so zu skalieren , das man zw. 1000 und 16 000 U/min auch noch eine annehmbare Auflösung hinbekommt. Na ja, heute läuft es schon ein paar Jahre Störungsfrei und für 14 000 U/min haben wir eine superhelle LED eingesetzt als Schaltblitz. mfG. ... | |||
| 34 - PC- IR-Lichtschranke(n) -- PC- IR-Lichtschranke(n) | |||
Zitat : Nur kenne ich die kleinsten Abfrage-Intervalle des Druckerports nicht. Das geht recht schnell. Frequenzen von mehreren MHz sind machbar, vertragen sich aber wahrscheinlich nicht mit Deinen langen Kabeln. Dein größeres Softwareproblem dürfte die Herstellung einer geeigneten Zeitbasis sein. Wenn Du den oben von mir erwähnten Timer-Tick verwendest, bist Du schnell damit fertig, beispielsweise basiert die Funktion Time im Qbasic darauf. Ob Du aber mit dem Quantisierungsfehler von knapp 55ms - bei 1,7s Meßzeit entspricht das immerhin 3,2% - leben kannst, mußt Du selbst entscheiden. Der PC hat aber noch einen weiteren Timerkanal, den Du nach Belieben benutzen kannst. Er wird normalerweise z.B. zur Sound-Erzeugung über den eingebauten Lautsprecher verwendet. Die Programmierung des Chips ist aber um einiges schwieriger, als einfach nur eine Systemvariable auszulesen. PS: Die Timerkanäle im PC werde... | |||
| 35 - µC in Betrieb, oder nicht? -- µC in Betrieb, oder nicht? | |||
| Wollt ihn für 6 Euro verschärbeln.
Ein spott Preis find ich, bei dem was der alles bietet! Hier mal die groben Features: # M68HC11 Central Processing Unit (CPU) # Power Saving STOP and WAIT Modes # 512 Bytes Electrically Erasable Programmable Read-Only Memory (EEPROM) # 1024 Bytes RAM, Data Retained During Standby # Nonmultiplexed Address and Data Buses # Enhanced 16-Bit Timer # ---Three Input Capture (IC) Channels # ---Four Output Compare (OC) Channels # ---One Additional Channel, Selectable as Fourth IC or Fifth OC # 8-Bit Pulse Accumulator Wenn Interesse besteht, mail mich an! [ Diese Nachricht wurde geändert von: FatalError am 12 Sep 2003 17:45 ]... | |||
| 36 - unbekanntes Programm entdeckt -- unbekanntes Programm entdeckt | |||
| Das öffnen der Datei geht nicht, also hier das Listing:
MC68HC711E9 Bootloader ROM 1 **************************************************** 2 * BOOTLOADER FIRMWARE FOR 68HC711E9 - 21 Aug 89 3 **************************************************** 4 * Features of this bootloader are... 5 * 6 * Auto baud select between 7812.5 and 1200 (8 MHz) 7 * 0 - 512 byte variable length download 8 * Jump to EEPROM at $B600 if 1st download byte = $00 9 * PROGRAM - Utility subroutine to program EPROM 10 * UPLOAD - Utility subroutine to dump memory to host 11 * Mask I.D. at $BFD4 = $71E9 12 **************************************************** 13 * Revision A - 14 * 15 * Fixed bug in PROGRAM routine where the first byte 16 * programmed into the EPROM was not transmitted for 17 * verify. 18 * Also added to PROGRAM routine a skip of bytes 19 * which were already programmed to the value desired. 20 * 21 * This new version allows variable length download 22 * by quitting reception of characters when an idle 23 * of at least four character times occurs 24 * 25 **************************************************** 26 27 * EQUATES FOR USE WITH INDEX OFFSET = $1000 28 * 29 0008 PORTD EQU... | |||
| 37 - DMX-Empfangs-Programm für AVR -- DMX-Empfangs-Programm für AVR | |||
| also, bevor ich jetzt tausendmal nachfrage, poste ich doch einfach mal den programmtext, und du kannst dann ja mal das nötige verändern. falls du da die zeit zu hast $baud = 250000 On Urxc Rx_sub Enable Serial Declare Sub Get_byte '******************************************************************************* Config Lcdpin = Pin , Db4 = Porta.0 , Db5 = Porta.1 , Db6 = Porta.2 , Db7 = Porta.3 , E = Porta.6 , Rs = Porta.4 Config Lcd = 16 * 2 Cls Cursor Off '******************************************************************************* Do 'hier soll erstmal nur der wert des eingestellten dmx-kanals in eine varible geschrieben werden! Loop '******************************************************************************* $asm Get_byte: ' das unterprogramm aus dem ASM-Listing ' inc dmx_countL mußt du als inc r22 schreiben ' so wie es in den .def steht ' also die Namen gegen die Register tauschen ' 8515 mit 8MHz .include "8515def.inc" .equ Channels_all = 1 ... | |||
| 38 - SONS selbstbau spdif -- SONS selbstbau spdif | |||
| mist,dann ist die frequenz zu hoch, zumindest fuer interrupt-betrieb.
unter purem dos koennte ich versuche,es per polling zu machen, bei 1,2mhz wechselt der timer 40h 256 mal seinen wert,d.h. wenn ich den immer abfrage kann ich mich im polling nach dem richten,und entsprechend oft pollen. da der paralelport ein isa-device ist stuenden dann 13,3333 mhz zur verfuegungs fuers polling. bloss,da ich dann zwischendurch von hdd lesen und schrieben muss, befuerchte ich,ohne irq gibt das dann ständig aussetzer,vemrutlich tuts dann also wirklich nicht na,ja, ich les mirs trotzdem mal durch. wenn man von éiner ramdisk liest und schriebt, muessten die zugriffe kurz genug sein, um es dennoch zu schaffen,bloss stehen dann nur 32mb maximale dateilänge (3 moinuten udn 20 sekunden musik) zur verfuegung bei 44khz 16 bit stereo na,ja, ich arbeite dran. kennst du einen ramdisk treiber fuer dos, der mehr als 32 mb erlaubt??? keinen bock, mit himem.sys xms-programmierugn rumzuschlagen (umd ie daten selber zu puffern). im notfall koennte ich im flat protected mode arbeiten... bei 256 mb ram in meine, pc wären dann 25 minuten und 40 sekunden audio am ... |
|
Zum Ersatzteileshop Bezeichnungen von Produkten, Abbildungen und Logos , die in diesem Forum oder im Shop verwendet werden, sind Eigentum des entsprechenden Herstellers oder Besitzers. Diese dienen lediglich zur Identifikation! gerechnet auf die letzten 30 Tage haben wir 9 Beiträge im Durchschnitt pro Tag heute wurden bisher 2 Beiträge verfasst 5 Besucher in den letzten 60 Sekunden alle 12.00 Sekunden ein neuer Besucher ---- logout ----su ---- logout ---- |