- Details
- Geschrieben von: Super User
- Kategorie: AVR Atmega Projekte
- Zugriffe: 15477
Tastverhältnis von einem PWM-Signal messen.
Version 1 mit ATiny2313
Testprogramm um zu demonstrieren, wie man mit einem ATiny-Prozossor das Tastverhältnis eines PWM-Signal messen kann.
Da mit Absicht ein kleiner Prozessor (ATtiny2313) gewählt wurde, können die Ergebnise nur via RS232 - Schnittstelle ausgegeben werden.
Für eine Ausgabe auf dem LCD reicht der Arbeitsspeicher vom Prozessor nicht aus.
Das besonderer hierbei ist, dass jedes einzelnes PWM-Verhältnis berechnet wird.
Abb. 1.1 - Schaltplan PWM-Tastverhältnismessung mit ATTiny 2313
.... todo... hier kommt die Projektbeschreibung rein, um mit den Atmel Prozessoren ein PWM-Signal zu messen
Version 2 mit ATmega 168
PWM-Tastverhältniswandlung zu 0-5V (0-10V)
Für die 2.Variante wurde eine Leiterplatte entworfen (s. u.).
Wegen den größeren Rersourcen dieses Prozessors könnnen jetzt gleichzeitig die Ausgaben auf LCD und RS232 gewählt werden.
Desweiteren kann der Messwert wieder analog ausgegeben werden.
Die DA-Wandlung erfolgt mit einem R2R-Netzwerk und optionalen Verstärker um das Ausgangssignal in den Bereich von 0-10V zu konvertieren.
Anforderung:
Ein PWM-Signal mit einer Frequenz von 1kHz soll gemessen werden und das Tastverhältnis soll dann als analogen Spannungswert von 0-10 V ausgegeben werden.
Realisierung:
- PWM-Messung:
Für die PWM-Messung wird der ICP-Interupt (Input Capture Interrupt) verwendet, da hier sehr einfach ohne große Prozessorlast die die Signaldauer der High und Low-Pegel ermittelt werden kann. - Berechnung Tastverhältnisses:
Die eigentliche Berechnung erfolgt dann in einer Assembler-Routine. Für die Berechnung wird nur die Nachkommastelle mit einer Ganzzahldivision berechnet.
Für die Nachkommastelle werden 12 Bit verwendet, dies hat dann eine theoretische Auflösung von 0.0241% zur Folge.
Um eine einfache und schnelle dez-ASCCI Wandlung sicherzustellen wird jedoch mit gerundeten Bit-Werten für die Nachkommastellen gerechnet. Dadurch verschlechtert sich die Genauigkeit welche eigentlich möglich wäre.
Deshalb kommt man nur auf folgende Werte:
Auflösung: 0,01 %
Genauigkeit: 0,1% +- 1 Digit (geschätzt, die genaue Fehlerrechnung müsste man noch durchführen) - Funktionstests:
Getestet wurde das ganze mit einem PWM-Signal mit einer Grundfrequenz von 230 Hz und mit einer Timer-Frequenz von 1 MHz für die ICP Einheit.
Die Ausgabe der Messwerte erfolgt im folgenden Format:
H=1056,L=3152 ==> PWM: 25.10% // kosntantes Eingangsignal
H=1058,L=3157 ==> PWM: 25.10%
H=1058,L=3154 ==> PWM: 25.07%
H=1057,L=3154 ==> PWM: 25.10%
H=1057,L=3154 ==> PWM: 25.10%
...
und mal mit verändertem Tastverhältnis:
H=2525,L=1682 ==> PWM: 60.26% // PWM läuft hoch
H=2540,L=1667 ==> PWM: 60.36%
H=2472,L=1659 ==> PWM: 61.40%
H=2606,L=1592 ==> PWM: 63.11%
H=2656,L=1543 ==> PWM: 64.18%
H=2720,L=1491 ==> PWM: 66.14%
H=2709,L=1411 ==> PWM: 68.51% - DA-Wandlung mittels R2R-Netzwerk:
Hier werden 2 Schieberegister ( 74HC595), in denen der 16-Bit PWM-Messwert (obwohl die Messung nur mit 12Bit erfolgt) via SPI-Schnittstelle rein geschoben wird, verwendet.Verwendetet Pins:- SER - MOSI PB3 : serielle Daten für das Schieberegister
- SCK - SCK PB5 : Taktsignal für das Schieberegister
- SCL - Reset : Master Reset (MR) vom Schieberegister (low aktiv)
- SS_RCK- RCK PB2 : Takt für das Speicher Latch (positive Flanke übernimmt den Wert vom Schieberegister)
- G - Enable PD2 : Output Enable Eingang (low aktiv)
.... todo... hier kommt die Projektbeschreibung rein, um mit den Atmel Prozessoren ein PWM-Signal zu messen und entsprechend des Tastverhälnisses als analoge Spannungssignal von 0-5V (bzw. 0-10V) auszugeben.
Hinweis zu Codevision:
- Für die Anpassung an ATMEGA 168 wurde der Word-Zugriff für das ICR1-Register in der mega168.h hinzugefügt:
#define ICR1 (*(unsigned int *) 0x86) // 16 bit access insert by aw
Vorab mal die EAGLE-3D Ansichten von der fertigen Leiterplatte.
Abb.2.1 Leiterplatte PWM zu Analog-Wandlung - Bestückungsseite
Abb. 2.2 Leiterplatte PWM zu Analog-Wandlung -Leiterbahnseite
(letzte Änderung 31.12.2011)
- Details
- Geschrieben von: Super User
- Kategorie: AVR Atmega Projekte
- Zugriffe: 11822
Einleitung
In machen Fahrzeugen liegen die Lenkradbedientasten noch in analoger Form da, ( und sind somit nicht auf dem CAN-Bus als Signale vorhanden). Das Grundprinzip ist meistens, dass die Lenkradbedientasten jeweils ein Widerstandsnetzwerk zusammen schalten und das original Radio somit immer einen festen Spannungswert im Bereich von 0-5 V für eine bestimmte Taste bekommt um zu erkennen welche Taste gedrückt wurde. In manchen Fahrzeugen (z.B. Fiat , Peugeot sind es sogar 2 Netzwerke).
Möchte man nun ein Nachrüstradio nachrüsten, welches ein analoge Remote-Steuerung ermöglicht, so benötigt man dieses LFB-Adapter um das Nachrüstradio mit den original Lenkradbedientasten steuern zu können.
Gleichzeitig diente dieses Projekt dazu, sich mit dem Hardware PWM-Modul vom ATiny vertraut zu machen und demonstriert somit wie man eine DA-Wandlung mittels eines PWM-Signals durchführen kann.
Die PWM-Grundfrequenz beträgt hierbei 50 kHz
Ausgangsspannungsbereich: 0-5 V
Auflösung: 50mV
Anforderung
- preiswert
- universell einsetzbar, d.h. es sollen verschieden Fahrzeuge und Nachrüstmodelle unterstützt werden (nur Software Modifikation)
- 2 analoge Eingänge für die Erfassung der Lenkradbedientasten
- 1 analoges Ausgangssignal im Bereich von 0-5 V für die Remotesteuerung des Nachrüstradios
- 1 digitales Ausgangssignal ( 0V oder 5 V) für die Shift-Funktion von manchen Nachrüstradios
- LCD-Debug-Schnittstelle für mein LCD-Modul (LCD Anzeige Modul (HD44780 kompatible) )
Realisierung
- Die Prozessorauswahl für das Adapter viel auf den ATiny26 von Atmel (klein und preiswert).
Für die 2 erforderlichen analoge Eingänge werden die integrierte ADC-Wandler vom ATiny verwendet.
Ebenso wurde auf den externe Quarz verzichtet und stattdessen der interne RC-Oszillator vom ATiny verwendet. - Das analoge Ausgangssignal wird mittels eines PWM - Signal erzeugt:
- Grundfrequenz 50 kHz
- Ausgangsspanungsbereich 0-5V
- Auflösung 50 mV
Um dies zu erreichen, wird das PWM-Signal vom Prozessor über einen passiven Tiefpass 3.Ordnung geführt und mittels eines Operations-Verstärker der hier als Impedanzwandler verwendet wird vom Tiefpass entkoppelt. - Der digitale Schaltausgang schaltet nach Masse und hat einen Pull-Up-Widerstand von 10 kohm nach +5V
- Da die Schaltung am Bordnetz eines Fahrzeuges betrieben wird, werden ein paar zusätzliche Bauteile zum Schutz der Schaltung vorgesehen:
- Diode D2 dient als Verpolschutz
- Diode D3 Begrenzung von Spannungsspitzen
- R9 dient zur Strombegrenzung (vor allem im Zusammenspiel mit D3)
- L1 dient zur Filterung von hohen Störspannungen mit hoher Frequenz
- D4 und D5 sind nur optional und werden nicht bestückt - ISP-Schnittstelle für die In Circuit Programmierung des Prozessors
Hier kommt noch ein LT-Spice Simulation rein für die Dimensionierung des Tiefpasses.
Software
....todo....
Hardware
Schaltplan
Hardware- Leiterplatte:
(letzte Änderung 31.12.2011)
- Details
- Geschrieben von: Super User
- Kategorie: AVR Atmega Projekte
- Zugriffe: 15061
Testschaltung um mit einem ATmega 88 mittels PWM eine RGB-LED - Stripe (5m) anzusteuern.
Es werden alle 6 Hardware PWM-Kanäle benutzt, wobei 3 Kanäle MOSFET's ansteuern.
Abweichend vom Schaltplan hatte ich in meinem Testaufbau den IAR 1010N - MOSFET'S verwendet. Dieser MOSFET Typ ist etwas überdimensioniert und hat eine relative hohe Gate-Kapazität von 120 nC. Bei dem gewählten Gate-Vorwiderstand von 100 Ω ergibt dies einen maximalen Gatestrom von ca. 2.6 mA (s. LT-Spice Simulation). Dieser MOSFET's ist für diese Anwendung überdimensioniert, deshalb kann das LED-Stripe um weitere 5m Ketten erweitert werden.
Beim Einsatz von IRLZ34n kann der Vorwiderstand ganz entfallen, da dies ein Logic Leve MOSFET ist
Abb. 3D-Visiualisierung mit Eagle3D von der fertigen Leiterplatte
Projekt-Archive:
Das Projektarchive besteht aus den Eagle-Dateien,LT-Spice Mosfet Simulation und Testsoftware für Codevision AVR.
Download: rgb_stripe.rar (192 kB)
PDF-Dokumentation:
- Schaltplan
- Bestückungsplan
- Layout (Ansicht von Bestückungsseite, rote Leiterbahnen wurden als Drahtbrücken eingesetzt
- LTSPICE MOSFET Simulation (IRLZ34N , IRF 7401, IRF 3704, IRF3706sl, IRF1010N)
Datenblätter:
- IRLZ 34n - Logic Level MOSFET N-Kanal 27A / 55V (Reichelt: 0,47 Euro)
- IRF1010n MOSFET N-Kanal 85A / 55V (Conrad: 1,96 Euro , zu teuer :-) )
- AVR ATmega 88 (Reichelt: 3,65 Euro)
- Spannungsregler 7805 (Reichelt: 0,29 EURO)
- BC550C NPN Transistor TO-92, 45V, 0,1A , 625mW (Reichelt: 0,04 Euro)
Erweiterte Version von der RGB -Schaltung
Obige Schaltung wurde jetzt um folgendes erweitert:
- optional können jetzt die 3 Transistoren ebenfalls durch Mosfets ersetzt werden. Layout wurde so angepasst das wahlweise die Transistoren oder weitere 3 MOS-Fets bestück werden können
- 3 Trimmer hinzugefügt um einen RGB-Farbwert mit den Trimmern einzustellen.
- 1 Taster hinzugefügt um den Modus zwischen automatischen Ablauf/RGB-Trimmerwert umzuschalten.
( In der Software wurden noch weitere Unterscheidung eingefügt, die davon abhängen, ober der Taster beim Einschalten der Versorgungsspannung gedrückt war oder nicht. - 6-polige Stiftleiste für die RS-232-Schnittstelle hinzugefügt (bis jetzt nur im Schaltplan, im Layout der die Stifleiste noch nciht platziert) um mein RS232-Modul anschließen um die RGB-Stripes vom PC aus zu steuern.
Schaltplan
Bestückungsplan:
Layout
Das Layout ist wird als einseitige Leiterplatte ausgeführt, die Verbindungen im Top-Layer sind Drahtbrücken auf der LP
Eagle-3D- Visualisierungen von der 2.Variante:
Testaufbau von der 2. Variante:
PDF-Dokumentation von der 2.Variante:
- Schaltplan
- Bestückungsplan
- Layout (Ansicht von Bestückungsseite, rote Leiterbahnen wurden als Drahtbrücken eingesetzt)
Software
... todo: noch Online stellen.......
(letzte Änderungen 31.12.2011)
- Details
- Geschrieben von: Super User
- Kategorie: AVR Atmega Projekte
- Zugriffe: 14505
AVR-MP3-Player mit dem MP3 Dekoder VS1011
..... in Kürze kommt hier mehr.
Dies sind meine ersten SD-Karten und MP3-Dekoder Versuche.
Der VS1011 und der SD-Karten-Slott hängen beide an der gleichen SPI-Schnittstelle vom Prozessor und der SPI-Busstakt beträgt 4 MHz.
Die SD-Karte muss mit FAT16 formatiert sein und alle Audiodateien müssen im Root-Verzeichnis abgelegt sein. Dies ist notwendig um nicht so viele Resourcen vom Prozessor zu belegen.
Bis jetzt habe ich das Audiomodul mit MP3-Dateien:
- Abtastrate 22kHz ; Bitrate = 32 kbit/s ; Mono
- Abtastrate 16kHz ; Bitrate = 32 kbit/s ; Stereo
getestet.
Die sehr gute Klangqualität hat mich hierbei etwas überrascht.
Zur Zeit betreibe ich den Mikrocontroller mit dem internen RC-Oszillator ( 8 MHz).
Projektziel
Universielles Audio-Modul, welches MP3 / WAV-Files von der SD-Karte abspielen kann. Für die Steuerung welche Dateien abgespielt werden sollen, werden später diverse IO-Pins verwendet.
Für Testzwecke (Entwicklungsphase) steht eine RS232-Schnittstelle zur Verfügung um direkt mit dem Audio-Modul interaktieren zu können.
Konzept
Für die Umsetzung habe ich mich für den MP3-Dekoder Chip VS1011E von VLSI entschieden. Und als Mikrocontroller kommt mein geliebter ATmega 162 (wegen der JTAG-Schnittstelle) zum Einsatz.
Mein Konzept sieht zur Zeit vor, dass die Audiodaten erst vom Prozessor in 32 Bytes Blöcken von der SD-Karte gelesen werden, und dann vom Prozessor an den Audiocontroller gesendet werden. Hierdurch wird quasi die Hälfte der möglichen Bandbreite verschwendet. An dieser Stelle kann die Software dahingehend optimiert werden, dass man den Audioprozessor und die SD-Karte im Streamingmode ( SD-Karte: CMD18) verwendet, und die Audiodaten direkt von der SD-Karte an VS1011E Controller sendet. Dadurch würde sich die mögliche Bandbreite wahrscheinlich verdoppeln.
Da der VS1011E und die SD-Karte mit 3,3 V betrieben werden und ich keine Pegelanpassung für den Atmel-Controller machen wollte, habe ich mich dafür entschieden, den ATmega162 ebenfalls mit 3,3 V zu betreiben. Dafür wird in Kauf genommen, dass man den Prozessor nicht mit einem 16 MHz Quarz betreiben kann. Für die Anbindung des MAX-232 Schnittstellentreibers kann die RXD-Leitung zum Prozessor hin mit einem einfachen Widerstandsspannungsteiler an den 3,3 V Pegel angepasst werden.
Realisierung
Schaltplan:
Abb. 1 - Schaltplan - 1. Seite - Audiomodul
Abb. 2 Schaltplan - 2.Seite - Audiomodul serielle Schnittstelle RS232
Hinweise zur 2.Seite: R15 = 0 ohm, R16 und R17 entfallen
Eagle3D-Bild:
Downloads:
Schaltplan als PDF-Datei
Bauteilliste
Vorab-Info:
- ATmega 162 (Versorgungsspannung 3,3V )
Für den ersten Test wurde der interne RC-Oszillator (8 MHz) verwendet. Damit RS232 Schnittstelle richtig funktioniert, muss bei der Programmierung an die EEPROM - Adresse 0x000 das OSCAL-Byte hinterlegt werden, da die Software eine Kalibrietung der Oszillatorfrequenz durchführt. - MP3-Dekoder VS1011 , der im Newmode betrieben wird.
- SD-Karte Schnittstelle basiert auf der PETIT-FAT - Libraray, welche ich an CodevisionAVR angepasst habe. Weitere Infos sind hier zu finden : Petit FAT Filesystem
Der Vorteil der Petiit Lib ist, dass hier nur wenige Resourcen vom Prozessor belegt werden. - SPI und JTAG Schnittstelle , ISP
- RS232-Schnittstelle ( 19200 8 N 1)
- Bei der Programmierung darauf achten, dass der Prozessor mit 3,3 V betrieben wird, deshalb sollte der Programmer auf 3,3 V eingegestellt werden, sonst kann der VS1011 zerstört werden
- Programmierung in C mit dem CodeVisionAVR Compiler
- SD-Karte muss mit FAT 16 formartiert werden. Prinzipiell könnte auch FAT32 verwendet werden, da dies von der Petit - Lib auch unterstützt wird. Für meine Testzwecke beschränke ich mich auf FAT 16
Überarbeitete Version (Index 01) von der Schaltung
Modifikationen:
-
SD-Kartenslot um 180° gedreht
-
5 Abblockkondensatoren für den VS1011E auf der PCB platziert (vorher nur im Schaltplan)
-
Mehr Platz für den ISP-Wannenstecker vorgesehen
-
Signale für von dem SD-Karten-Slot:
- Detect- SD-Karte eingeschoben
- WP-Prot: Status für den Schreibschutz
auf I/O Eingänge von Atmel geführt -
2x Schutzwiderstände in den Audioausgangsleitungen vor den Elkos eingefüght (18 Ohm)
Schaltplan
Downloads:
Schaltplan als PDF-Datei (Index 01)
Vorschau von der überarbeitete Version:
- Details
- Geschrieben von: Super User
- Kategorie: AVR Atmega Projekte
- Zugriffe: 43195
RFM12 - 868 MHz Funkmodul mit Atmel Prozessor ansteuern
Kurzbeschreibung: |
|
Hier wird demonstriert wie einfach man eine Funkverbindung mit den 868-MHz-Funkmodule des Typs RFM12 aufbauen kann. Für die Ansteuerung der Module werden Atmel-Mikrocontroller verwendet. Die Anforderung an die Hardware sind sehr gering, da die Funktmodule über eine SPI-Schnittstelle verfügen, über die die Module angesprochen werden. Somit benötigt man legendlich 4 I/O Schnittstellenleitungen um mit dem Modul zu kommunizieren. |
|
|
|
Das Sendemodul sendet periodisch im Sekundentakt 5 Hex-Werte. |
|
|
|
Funkmodul RFM12:Das Funkmodul verwendet den Si4420 Universal ISM Bank Fsck Transceiver von Integration / Siliconlaps (Datasheet). Das Funkmodul lässt sich zwischen den Frequenzbereichen (315/433/868/915 MHz) umschalten wobei man immer nur das Frequenzband verwenden sollte, auf dass das Modul abgestimmt ist, um eine optimal Sende/Empfangsleistung zu erreichen.
|
|
|
|
|
|
Empfänger (Testaufbau mit STK 500 Testboard und ATMEGA 48):Für das Empfängermodul wird ein ATMega 48 verwendet. Der Testaufbau erfolgt auf dem Entwicklungskit STK500. Somit muss man das Funkmodul RFM12 nur noch auf einen Adaptersockel löten, welchter dann direkt auf das STK-500 Board auf den Port B gesteckt wird. |
|
|
|
Empfänger-Modul: |
|
Erweiterungen:Empfänger 2.Variante auf Lochrasterkarte mit dem ATTiny13:Das Empfängermodul wurde ebenfalls auf einer Lochrasterkarte unter Verwendung eins ATTiny13 -Prozessors aufgebaut.
|
|
Links:
Bezugsquellen für obige Bauteile: |
|
(letzte Änderungen 18.08.2009)