Amateurfunk Forum - Archiv

Fragen und Antworten zum Thema Funk


Impressum

Verantwortlich für dieses Angebot gemäß § 5 TMG / § 55 RStV:
Michael Ott
Dorpater Straße 11
70378 Stuttgart
Deutschland



Trotz sorgfältiger inhaltlicher Kontrolle übernehmen wir keine Haftung für die Inhalte externer Links. Für den Inhalt der verlinkten Seiten sind ausschließlich deren Betreiber verantwortlich.

Datenschutzerklärung

Diese Datenschutzerklärung klärt Sie über die Art, den Umfang und Zweck der Verarbeitung von personenbezogenen Daten (nachfolgend kurz „Daten“) innerhalb unseres Onlineangebotes und der mit ihm verbundenen Webseiten, Funktionen und Inhalte auf (nachfolgend gemeinsam bezeichnet als „Onlineangebot“). Im Hinblick auf die verwendeten Begrifflichkeiten, wie z.B. „Verarbeitung“ oder „Verantwortlicher“ verweisen wir auf die Definitionen im Art. 4 der Datenschutzgrundverordnung (DSGVO).

Verantwortlicher

Michael Ott
Dorpater Straße 11
70378 Stuttgart
Deutschland



Arten der verarbeiteten Daten:

- Meta-/Kommunikationsdaten (siehe Abschnitt „Erhebung von Zugriffsdaten und Logfiles“)

Kategorien betroffener Personen

Besucher und Nutzer des Onlineangebotes (Nachfolgend bezeichnen wir die betroffenen Personen zusammenfassend auch als „Nutzer“).

Zweck der Verarbeitung

- Zurverfügungstellung des Onlineangebotes, seiner Funktionen und Inhalte
- Sicherheitsmaßnahmen.

Verwendete Begrifflichkeiten

„Personenbezogene Daten“ sind alle Informationen, die sich auf eine identifizierte oder identifizierbare natürliche Person (im Folgenden „betroffene Person“) beziehen; als identifizierbar wird eine natürliche Person angesehen, die direkt oder indirekt, insbesondere mittels Zuordnung zu einer Kennung wie einem Namen, zu einer Kennnummer, zu Standortdaten, zu einer Online-Kennung (z.B. Cookie) oder zu einem oder mehreren besonderen Merkmalen identifiziert werden kann, die Ausdruck der physischen, physiologischen, genetischen, psychischen, wirtschaftlichen, kulturellen oder sozialen Identität dieser natürlichen Person sind.

„Verarbeitung“ ist jeder mit oder ohne Hilfe automatisierter Verfahren ausgeführte Vorgang oder jede solche Vorgangsreihe im Zusammenhang mit personenbezogenen Daten. Der Begriff reicht weit und umfasst praktisch jeden Umgang mit Daten.

„Pseudonymisierung“ die Verarbeitung personenbezogener Daten in einer Weise, dass die personenbezogenen Daten ohne Hinzuziehung zusätzlicher Informationen nicht mehr einer spezifischen betroffenen Person zugeordnet werden können, sofern diese zusätzlichen Informationen gesondert aufbewahrt werden und technischen und organisatorischen Maßnahmen unterliegen, die gewährleisten, dass die personenbezogenen Daten nicht einer identifizierten oder identifizierbaren natürlichen Person zugewiesen werden.

Als „Verantwortlicher“ wird die natürliche oder juristische Person, Behörde, Einrichtung oder andere Stelle, die allein oder gemeinsam mit anderen über die Zwecke und Mittel der Verarbeitung von personenbezogenen Daten entscheidet, bezeichnet.

„Auftragsverarbeiter“ eine natürliche oder juristische Person, Behörde, Einrichtung oder andere Stelle, die personenbezogene Daten im Auftrag des Verantwortlichen verarbeitet.

Maßgebliche Rechtsgrundlagen

Nach Maßgabe des Art. 13 DSGVO teilen wir Ihnen die Rechtsgrundlagen unserer Datenverarbeitungen mit. Sofern die Rechtsgrundlage in der Datenschutzerklärung nicht genannt wird, gilt Folgendes: Die Rechtsgrundlage für die Einholung von Einwilligungen ist Art. 6 Abs. 1 lit. a und Art. 7 DSGVO, die Rechtsgrundlage für die Verarbeitung zur Erfüllung unserer Leistungen und Durchführung vertraglicher Maßnahmen sowie Beantwortung von Anfragen ist Art. 6 Abs. 1 lit. b DSGVO, die Rechtsgrundlage für die Verarbeitung zur Erfüllung unserer rechtlichen Verpflichtungen ist Art. 6 Abs. 1 lit. c DSGVO, und die Rechtsgrundlage für die Verarbeitung zur Wahrung unserer berechtigten Interessen ist Art. 6 Abs. 1 lit. f DSGVO. Für den Fall, dass lebenswichtige Interessen der betroffenen Person oder einer anderen natürlichen Person eine Verarbeitung personenbezogener Daten erforderlich machen, dient Art. 6 Abs. 1 lit. d DSGVO als Rechtsgrundlage.

Sicherheitsmaßnahmen

Wir treffen nach Maßgabe des Art. 32 DSGVO unter Berücksichtigung des Stands der Technik, der Implementierungskosten und der Art, des Umfangs, der Umstände und der Zwecke der Verarbeitung sowie der unterschiedlichen Eintrittswahrscheinlichkeit und Schwere des Risikos für die Rechte und Freiheiten natürlicher Personen, geeignete technische und organisatorische Maßnahmen, um ein dem Risiko angemessenes Schutzniveau zu gewährleisten.

Zu den Maßnahmen gehören insbesondere die Sicherung der Vertraulichkeit, Integrität und Verfügbarkeit von Daten durch Kontrolle des physischen Zugangs zu den Daten, als auch des sie betreffenden Zugriffs, der Eingabe, Weitergabe, der Sicherung der Verfügbarkeit und ihrer Trennung. Des Weiteren haben wir Verfahren eingerichtet, die eine Wahrnehmung von Betroffenenrechten, Löschung von Daten und Reaktion auf Gefährdung der Daten gewährleisten. Ferner berücksichtigen wir den Schutz personenbezogener Daten bereits bei der Entwicklung, bzw. Auswahl von Hardware, Software sowie Verfahren, entsprechend dem Prinzip des Datenschutzes durch Technikgestaltung und durch datenschutzfreundliche Voreinstellungen (Art. 25 DSGVO).

Zusammenarbeit mit Auftragsverarbeitern und Dritten

Sofern wir im Rahmen unserer Verarbeitung Daten gegenüber anderen Personen und Unternehmen (Auftragsverarbeitern oder Dritten) offenbaren, sie an diese übermitteln oder ihnen sonst Zugriff auf die Daten gewähren, erfolgt dies nur auf Grundlage einer gesetzlichen Erlaubnis (z.B. wenn eine Übermittlung der Daten an Dritte, wie an Zahlungsdienstleister, gem. Art. 6 Abs. 1 lit. b DSGVO zur Vertragserfüllung erforderlich ist), Sie eingewilligt haben, eine rechtliche Verpflichtung dies vorsieht oder auf Grundlage unserer berechtigten Interessen (z.B. beim Einsatz von Beauftragten, Webhostern, etc.).

Sofern wir Dritte mit der Verarbeitung von Daten auf Grundlage eines sog. „Auftragsverarbeitungsvertrages“ beauftragen, geschieht dies auf Grundlage des Art. 28 DSGVO.

Übermittlungen in Drittländer

Sofern wir Daten in einem Drittland (d.h. außerhalb der Europäischen Union (EU) oder des Europäischen Wirtschaftsraums (EWR)) verarbeiten oder dies im Rahmen der Inanspruchnahme von Diensten Dritter oder Offenlegung, bzw. Übermittlung von Daten an Dritte geschieht, erfolgt dies nur, wenn es zur Erfüllung unserer (vor)vertraglichen Pflichten, auf Grundlage Ihrer Einwilligung, aufgrund einer rechtlichen Verpflichtung oder auf Grundlage unserer berechtigten Interessen geschieht. Vorbehaltlich gesetzlicher oder vertraglicher Erlaubnisse, verarbeiten oder lassen wir die Daten in einem Drittland nur beim Vorliegen der besonderen Voraussetzungen der Art. 44 ff. DSGVO verarbeiten. D.h. die Verarbeitung erfolgt z.B. auf Grundlage besonderer Garantien, wie der offiziell anerkannten Feststellung eines der EU entsprechenden Datenschutzniveaus (z.B. für die USA durch das „Privacy Shield“) oder Beachtung offiziell anerkannter spezieller vertraglicher Verpflichtungen (so genannte „Standardvertragsklauseln“).

Rechte der betroffenen Personen

Sie haben das Recht, eine Bestätigung darüber zu verlangen, ob betreffende Daten verarbeitet werden und auf Auskunft über diese Daten sowie auf weitere Informationen und Kopie der Daten entsprechend Art. 15 DSGVO.

Sie haben entsprechend. Art. 16 DSGVO das Recht, die Vervollständigung der Sie betreffenden Daten oder die Berichtigung der Sie betreffenden unrichtigen Daten zu verlangen.

Sie haben nach Maßgabe des Art. 17 DSGVO das Recht zu verlangen, dass betreffende Daten unverzüglich gelöscht werden, bzw. alternativ nach Maßgabe des Art. 18 DSGVO eine Einschränkung der Verarbeitung der Daten zu verlangen.

Sie haben das Recht zu verlangen, dass die Sie betreffenden Daten, die Sie uns bereitgestellt haben nach Maßgabe des Art. 20 DSGVO zu erhalten und deren Übermittlung an andere Verantwortliche zu fordern.

Sie haben ferner gem. Art. 77 DSGVO das Recht, eine Beschwerde bei der zuständigen Aufsichtsbehörde einzureichen.

Widerrufsrecht

Sie haben das Recht, erteilte Einwilligungen gem. Art. 7 Abs. 3 DSGVO mit Wirkung für die Zukunft zu widerrufen

Widerspruchsrecht

Sie können der künftigen Verarbeitung der Sie betreffenden Daten nach Maßgabe des Art. 21 DSGVO jederzeit widersprechen. Der Widerspruch kann insbesondere gegen die Verarbeitung für Zwecke der Direktwerbung erfolgen.

Löschung von Daten

Die von uns verarbeiteten Daten werden nach Maßgabe der Art. 17 und 18 DSGVO gelöscht oder in ihrer Verarbeitung eingeschränkt. Sofern nicht im Rahmen dieser Datenschutzerklärung ausdrücklich angegeben, werden die bei uns gespeicherten Daten gelöscht, sobald sie für ihre Zweckbestimmung nicht mehr erforderlich sind und der Löschung keine gesetzlichen Aufbewahrungspflichten entgegenstehen. Sofern die Daten nicht gelöscht werden, weil sie für andere und gesetzlich zulässige Zwecke erforderlich sind, wird deren Verarbeitung eingeschränkt. D.h. die Daten werden gesperrt und nicht für andere Zwecke verarbeitet. Das gilt z.B. für Daten, die aus handels- oder steuerrechtlichen Gründen aufbewahrt werden müssen.

Nach gesetzlichen Vorgaben in Deutschland, erfolgt die Aufbewahrung insbesondere für 10 Jahre gemäß §§ 147 Abs. 1 AO, 257 Abs. 1 Nr. 1 und 4, Abs. 4 HGB (Bücher, Aufzeichnungen, Lageberichte, Buchungsbelege, Handelsbücher, für Besteuerung relevanter Unterlagen, etc.) und 6 Jahre gemäß § 257 Abs. 1 Nr. 2 und 3, Abs. 4 HGB (Handelsbriefe).

Hosting und E-Mail-Versand

Die von uns in Anspruch genommenen Hosting-Leistungen dienen der Zurverfügungstellung der folgenden Leistungen: Infrastruktur- und Plattformdienstleistungen, Rechenkapazität, Speicherplatz und Datenbankdienste, E-Mail-Versand, Sicherheitsleistungen sowie technische Wartungsleistungen, die wir zum Zwecke des Betriebs dieses Onlineangebotes einsetzen.

Hierbei verarbeiten wir, bzw. unser Hostinganbieter Meta- und Kommunikationsdaten von Besuchern dieses Onlineangebotes auf Grundlage unserer berechtigten Interessen an einer effizienten und sicheren Zurverfügungstellung dieses Onlineangebotes gem. Art. 6 Abs. 1 lit. f DSGVO i.V.m. Art. 28 DSGVO (Abschluss Auftragsverarbeitungsvertrag).

Erhebung von Zugriffsdaten und Logfiles

Wir, bzw. unser Hostinganbieter, erhebt auf Grundlage unserer berechtigten Interessen im Sinne des Art. 6 Abs. 1 lit. f. DSGVO Daten über jeden Zugriff auf den Server, auf dem sich dieser Dienst befindet (sogenannte Serverlogfiles). Zu den Zugriffsdaten gehören Name der abgerufenen Webseite, Datei, Datum und Uhrzeit des Abrufs, übertragene Datenmenge, Meldung über erfolgreichen Abruf, Browsertyp nebst Version, das Betriebssystem des Nutzers, Referrer URL (die zuvor besuchte Seite), IP-Adresse und der anfragende Provider.

Logfile-Informationen werden aus Sicherheitsgründen (z.B. zur Aufklärung von Missbrauchs- oder Betrugshandlungen) für die Dauer von maximal 7 Tagen gespeichert und danach gelöscht. Daten, deren weitere Aufbewahrung zu Beweiszwecken erforderlich ist, sind bis zur endgültigen Klärung des jeweiligen Vorfalls von der Löschung ausgenommen.

Vom Websiteinhaber angepasst
Erstellt mit Datenschutz-Generator.de von RA Dr. Thomas Schwenke




 [ 8 Beiträge ]  Gehe zu Seite 1,
Autor Nachricht
 Betreff des Beitrags: Micro QRP Transceiver SSB - Mein erster Versuch in SMD
Hallo Gemeinde,

vor einiger Zeit fand ich Pete Julianos (N6QW) "[url=http://www.jessystems.com/20MSHIRTPOCKET.html:2et91r4j]Shirt pocket Transceive[/url:2et91r4j]r" im Netz.

"Nettes Gerät,", dachte ich mir, "aber das Volumen von umgerechnet 250cm³ müsste sich doch noch etwas unterbieten lassen!?". In seinen Videos sagt Pete, dass der Transceiver eine Ausgangsleistung von 2W hat. Das war dann auch meine angepeilte Marke. Da ich aber Zweifel hatte, ob eine deutliche Volumenreduktion mit bedrahteten Bauelementen möglich ist, kam ich zu dem Schluss, jetzt zu versuchen, den TRX soweit möglich in SMD zu realisieren. Ein Grundstock an SMD-Bauelementen war dank der einschlägigen Dealer in der Elektrobucht schnell angelegt. Als Werkzeug nehme ich eine WELLER WHS40D-Lötstation mit einer 2 mm breiten Spatelspitze, eine Kopflupe mit Stirnband, Pinzetten mit unterschiedlichen Spitzen, Vakuumpumpe, 1mm-Entlötlitze und einen "Mini-Fluxer" von Stannol. Lötzinn ist Standard mit 1mm Durchmesser. Für ganz feine Sachen nehme ich aber Zinn mit 0,5 mm.

Das Platinenmaterial ist das bekannte FR-4. Ich benutze die doppelseitigen UND durchkontaktierten Platinen. Vorteil: Man kann die Schaltung auf der Ober- und der Unterseite aufbauen, was sehr platzsparend ist. Apropos "platzsparend", so sieht das fertige Gerät aus (Frontplatte muss noch beschriftet werden):

[attachment=1:2et91r4j]Micro-QRP-TRX for SSB and the 20m-Band by Peter DK7IH outside1.png[/attachment:2et91r4j]

Die Dimensionen meines TRX sind 11 x 7 x 3 cm=231 cm³. YESSS, es wurde tatsächlich kleiner als mein Vorbildgerät von N6QW, wenn auch nicht viel.

Das Innenleben ähnelt weitgehend meiner [url=https://radiotransmitter.files.wordpress.com/2015/06/dk7ih-qrp-ssb-handheld-transceiver-schematic-52.jpg:2et91r4j]20-Meter-Handfunke[/url:2et91r4j]. Allerdings fehlt das S/RF-Meter (das ist softwaremäßig realisiert), der LM386 wurde durch einen Gegentaktverstärker mit Komplementärtransistoren ersetzt ([url=http://www.hobby-bastelecke.de/bilder/schaltungen/gegentakt10.gif:2et91r4j]Beispiel[/url:2et91r4j]) und das Display ist diesmal kein 2x16 sondern ein graphisches OLED mit 0.96" Diagonale.

Um den Sender nicht zu hoch zu bauen (maximale Höhe im Gehäuse ist 23mm!) habe ich die 2SC2078 im TO-220-Gehäuse durch 2 Stück 2SC1957 im TO-126 ersetzt, Die Senderausgangsleistung beträgt bei Ub=11V 2 Watt und bei UB=12.5V 2.5 Watt. Nach der Fertigstellung des TRX kam der spannende Moment, nämlich die Frage ob mich mit der Mickerleistung überhaupt jemand hören würde. MD0RLA, SP5ZIM/p und EI8BLB hörten und kamen bereits beim ersten Anruf zurück und gaben Empfangsberichte von 57 bis 58. Nicht schlecht für die HF-Leistung mit der jedes Popelhandy "on air" ist! Aber das muss ja auch nur zur nächsten Basisstation kommen. ;-)

Hier der obligate Blick ins Innenleben:
[attachment=0:2et91r4j]Micro-QRP-TRX for SSB and the 20m-Band by Peter DK7IH inside 2.png[/attachment:2et91r4j]

Die Widerstände und Kondensatoren in den Dimensionen 0603 und 0805 sind zu 95% auf der Unterseite der Platine montiert, größere SMD- und bedrahtete Komponenten kommen auf die Oberseite. So wird's dann ordentlich kompakt.

Ausblick: Noch mehr Platz ließe sich sparen, wenn man nur 2 NE602 und diese dann für RX und TX gemeinsam benutzt und das SSB Filter jeweils umschaltet. Vielleicht komme ich ja beim nächsten TRX unter die Marke von 220cm³. ;-)

73 de Peter


  
 
 Betreff des Beitrags: Re: Micro QRP Transceiver SSB - Mein erster Versuch in SMD
Hallo Peter,

ganz große Klasse! Danke auch für den Link zur Originalversion. Schon da muß man sagen, alle Achtung! :D

Hoffe, dass Du nicht mal eines Tages einen Fehler beheben mußt :busch: :shock:

Meine SMD Erfahrung beschränkt sich derzeit auf das Einlöten zweier 8-Beiner, frag mich nicht nach Gehäuseform...
Dafür habe ich mir dann auch direkt eine preiswerte simple SMD Lötstation beo Pollin zugelegt zumal die ICs das Stück 12 Euro gekostet haben und noch zwei weitere auf den Einbau warten.
Mit zunehmenden Alter wird die SMD Geschichte aber nicht einfacher...als Modellbahner würde ich langsam auf LGB umsteigen... :D

73 de Hartmut


  
 
 Betreff des Beitrags: Re: Micro QRP Transceiver SSB - Mein erster Versuch in SMD
[quote]Hallo Peter,

ganz große Klasse! Danke auch für den Link zur Originalversion. Schon da muß man sagen, alle Achtung! :D

Hoffe, dass Du nicht mal eines Tages einen Fehler beheben mußt :busch: :shock:
[/quote]

Hallo Hartmut,

danke für's positive Feedback. Das Auswechseln defekter Teile gestaltet sich übrigens nicht ganz so schwierig. Ich finde das Auslöten von SMD-Teilen (außer ICs, das ist ein Problem für sich) viel einfacher als bei bedrahteten Bauteilen. Ich erhitze das Teil abwechselnd an beiden Enden und schnippe es dann irgendwann mit dem Lötkolben einfach weg. Bei Transistoren im SOT-23 wird eine Seite abgelötet, das Teil hochgebogen und dann die andere Seite entfernt. Die Teile fliegen hinterher in den Abfall, bei Preisen im Bereich weniger Cent wird nicht recycled. Auch weil die Teile mechanisch nicht ganz so standfest sind.

[quote]

Mit zunehmenden Alter wird die SMD Geschichte aber nicht einfacher...als Modellbahner würde ich langsam auf LGB umsteigen... :D

[/quote]

Genau das habe ich schon vor Jahren gemacht. Die Z-Sammlung verkauft und den Erlös in LGB investiert. Aber auch nur deshalb weil ich jetzt wesentlich mehr Platz habe und bei Z die Kontaktprobleme den Fahrspaß doch stark reduziert haben. Und dies trotz Staubabdeckung auf der Anlage und regelmäßigem Abwischen der Schienen. Wenn man nur am Putzen ist und kaum zu Fahren kommt, ist das nicht das Gelbe vom Ei. Aber eine aufgebaute LGB-Anlage habe ich natürlich nicht, aber im Sommer wird der Garten manchmal temporär okkupiert. ;-)

vy 73 de Peter


  
 
 Betreff des Beitrags: Re: Micro QRP Transceiver SSB - Mein erster Versuch in SMD
Tolles Projekt! Danke fürs Vorstellen.


  
 
 Betreff des Beitrags: Re: Micro QRP Transceiver SSB - Mein erster Versuch in SMD
Vielen Dank für die Vorstellung Deines Projekts Peter!

Mich würde interessieren wie Du die Softwareseite mit dem OLED realisiert hast? Wir realisierst Du den VFO? Ist da ein Si570 oder DDS drinnen oder ist die Frequenzanzeige ein Zähler?

Fragen über Fragen... :)

73!

Sven


  
 
 Betreff des Beitrags: Re: Micro QRP Transceiver SSB - Mein erster Versuch in SMD
[quote]Mich würde interessieren wie Du die Softwareseite mit dem OLED realisiert hast? Wir realisierst Du den VFO? Ist da ein Si570 oder DDS drinnen oder ist die Frequenzanzeige ein Zähler?
[/quote]

Hallo Sven und die anderen Hams auf diesem Kanal,

also, als VFO benutze ich ein DDS mit einem AD9835. Die Clockrate ist 50 MHz, der VFO liegt im Bereich um die 4 MHz (ZF = 9830 kHz). Auf dem Innenfoto des TRX sieht man oben links ein TSSOP-16 Breakoutboard wo der DDS-Chip draufsitzt.

Das OLED habe ich mit einer selbstgeschriebenen Software angesteuert, die in C geschrieben ist. Von dem Oled gibt es 2 Varianten, eine SPI und eine I²C-Variante. Ich nehme letztere. Als Hardware ist ein Arduino Pro Mini verbaut. Allerdings benutze ich das Arduinoboard nur als normales ATMega328-Board, den implementierten Bootloader habe ich mit dem ersten Aufspielen der Software gelöscht. Ich habe mich für diese Lösung mit dem Arduinoboard entschieden, weil das das kleinste Teil war, das erhältlich ist. Und für knapp 4,-€ mache ich mir auch nicht die Mühe, einen ATMega328, einen 16MHz-Quarz und noch die ganze Peripherie auf eine Platine zu löten. Keine Ahnung wie die Chinesen das preislich hinbekommen, aber ich denke ATMEL muss denen noch Geld zahlen, damit sie ihre Chips loswerden. ;-))

Falls Interesse an dem Code für das OLED besteht, könnte ich den gerne zur Verfügung stellen.

vy 73 de Peter


  
 
 Betreff des Beitrags: Re: Micro QRP Transceiver SSB - Mein erster Versuch in SMD
Hi Peter

Danke für die Projektvorstellung; ich hab bei meinem 5 Band Transceiver vorallem mit SMD-Bauteilen gebaut; R,C und Transistoren, allerdings nicht auf minimale Grösse getrimmt.
Am Code zum OLED-Display wär ich interessiert, hab eins in I2C rumliegen, aber noch nicht die Zeit gefunden, etwas damit zu machen.


  
 
 Betreff des Beitrags: Re: Micro QRP Transceiver SSB - Mein erster Versuch in SMD
Hallo zusammen, dann poste ich mal hier den Code für das OLED 1306 mit der SPI-Schnittstelle.

Zuerst den Zeichensatz:

[code:10la03bv]// Font 5x8 for LCD Display (derived from Nokia 5110 now used for OLED with 1306 chip)
const char fontchar[485] = {
0x00,0x00,0x00,0x00,0x00, // 20 space ASCII table for NOKIA LCD: 96 rows * 5 bytes= 480 bytes
0x00,0x00,0x5f,0x00,0x00, // 21 ! Note that this is the same set of codes for character you
0x00,0x07,0x00,0x07,0x00, // 22 " would find on a HD44780 based character LCD.
0x14,0x7f,0x14,0x7f,0x14, // 23 # Also, given the size of the LCD (84 pixels by 48 pixels),
0x24,0x2a,0x7f,0x2a,0x12, // 24 $ the maximum number of characters per row is only 14.
0x23,0x13,0x08,0x64,0x62, // 25 %
0x36,0x49,0x55,0x22,0x50, // 26 &
0x00,0x05,0x03,0x00,0x00, // 27 '
0x00,0x1c,0x22,0x41,0x00, // 28 (
0x00,0x41,0x22,0x1c,0x00, // 29 )
0x14,0x08,0x3e,0x08,0x14, // 2a *
0x08,0x08,0x3e,0x08,0x08, // 2b +
0x00,0x50,0x30,0x00,0x00, // 2c ,
0x08,0x08,0x08,0x08,0x08, // 2d -
0x00,0x60,0x60,0x00,0x00, // 2e .
0x20,0x10,0x08,0x04,0x02, // 2f /
0x3e,0x51,0x49,0x45,0x3e, // 30 0
0x00,0x42,0x7f,0x40,0x00, // 31 1
0x42,0x61,0x51,0x49,0x46, // 32 2
0x21,0x41,0x45,0x4b,0x31, // 33 3
0x18,0x14,0x12,0x7f,0x10, // 34 4
0x27,0x45,0x45,0x45,0x39, // 35 5
0x3c,0x4a,0x49,0x49,0x30, // 36 6
0x01,0x71,0x09,0x05,0x03, // 37 7
0x36,0x49,0x49,0x49,0x36, // 38 8
0x06,0x49,0x49,0x29,0x1e, // 39 9
0x00,0x36,0x36,0x00,0x00, // 3a :
0x00,0x56,0x36,0x00,0x00, // 3b ;
0x08,0x14,0x22,0x41,0x00, // 3c <
0x14,0x14,0x14,0x14,0x14, // 3d =
0x00,0x41,0x22,0x14,0x08, // 3e >
0x02,0x01,0x51,0x09,0x06, // 3f ?
0x32,0x49,0x79,0x41,0x3e, // 40 @
0x7e,0x11,0x11,0x11,0x7e, // 41 A
0x7f,0x49,0x49,0x49,0x36, // 42 B
0x3e,0x41,0x41,0x41,0x22, // 43 C
0x7f,0x41,0x41,0x22,0x1c, // 44 D
0x7f,0x49,0x49,0x49,0x41, // 45 E
0x7f,0x09,0x09,0x09,0x01, // 46 F
0x3e,0x41,0x49,0x49,0x7a, // 47 G
0x7f,0x08,0x08,0x08,0x7f, // 48 H
0x00,0x41,0x7f,0x41,0x00, // 49 I
0x20,0x40,0x41,0x3f,0x01, // 4a J
0x7f,0x08,0x14,0x22,0x41, // 4b K
0x7f,0x40,0x40,0x40,0x40, // 4c L
0x7f,0x02,0x0c,0x02,0x7f, // 4d M
0x7f,0x04,0x08,0x10,0x7f, // 4e N
0x3e,0x41,0x41,0x41,0x3e, // 4f O
0x7f,0x09,0x09,0x09,0x06, // 50 P
0x3e,0x41,0x51,0x21,0x5e, // 51 Q
0x7f,0x09,0x19,0x29,0x46, // 52 R
0x46,0x49,0x49,0x49,0x31, // 53 S
0x01,0x01,0x7f,0x01,0x01, // 54 T
0x3f,0x40,0x40,0x40,0x3f, // 55 U
0x1f,0x20,0x40,0x20,0x1f, // 56 V
0x3f,0x40,0x38,0x40,0x3f, // 57 W
0x63,0x14,0x08,0x14,0x63, // 58 X
0x07,0x08,0x70,0x08,0x07, // 59 Y
0x61,0x51,0x49,0x45,0x43, // 5a Z
0x00,0x7f,0x41,0x41,0x00, // 5b [
0x02,0x04,0x08,0x10,0x20, // 5c Yen Currency Sign
0x00,0x41,0x41,0x7f,0x00, // 5d ]
0x04,0x02,0x01,0x02,0x04, // 5e ^
0x40,0x40,0x40,0x40,0x40, // 5f _
0x00,0x01,0x02,0x04,0x00, // 60 `
0x20,0x54,0x54,0x54,0x78, // 61 a
0x7f,0x48,0x44,0x44,0x38, // 62 b
0x38,0x44,0x44,0x44,0x20, // 63 c
0x38,0x44,0x44,0x48,0x7f, // 64 d
0x38,0x54,0x54,0x54,0x18, // 65 e
0x08,0x7e,0x09,0x01,0x02, // 66 f
0x0c,0x52,0x52,0x52,0x3e, // 67 g
0x7f,0x08,0x04,0x04,0x78, // 68 h
0x00,0x44,0x7d,0x40,0x00, // 69 i
0x20,0x40,0x44,0x3d,0x00, // 6a j
0x7f,0x10,0x28,0x44,0x00, // 6b k
0x00,0x41,0x7f,0x40,0x00, // 6c l
0x7c,0x04,0x18,0x04,0x78, // 6d m
0x7c,0x08,0x04,0x04,0x78, // 6e n
0x38,0x44,0x44,0x44,0x38, // 6f o
0x7c,0x14,0x14,0x14,0x08, // 70 p
0x08,0x14,0x14,0x18,0x7c, // 71 q
0x7c,0x08,0x04,0x04,0x08, // 72 r
0x48,0x54,0x54,0x54,0x20, // 73 s
0x04,0x3f,0x44,0x40,0x20, // 74 t
0x3c,0x40,0x40,0x20,0x7c, // 75 u
0x1c,0x20,0x40,0x20,0x1c, // 76 v
0x3c,0x40,0x30,0x40,0x3c, // 77 w
0x44,0x28,0x10,0x28,0x44, // 78 x
0x0c,0x50,0x50,0x50,0x3c, // 79 y
0x44,0x64,0x54,0x4c,0x44, // 7a z
0x00,0x08,0x36,0x41,0x00, // 7b <
0x00,0x00,0x7f,0x00,0x00, // 7c |
0x00,0x41,0x36,0x08,0x00, // 7d >
0x10,0x08,0x08,0x10,0x08, // 7e Right Arrow ->
0x78,0x46,0x41,0x46,0x78, // 7f Left Arrow <-
0x00,0x06,0x09,0x09,0x06}; // 80 °
[/code:10la03bv]

Jetzt die Deklarationen für die I²C/TWI-Funktionen:
[code:10la03bv]//I²C
void TWIInit(void);
void TWIStart(void);
void TWIStop(void);
uint8_t TWIReadACK(void);
uint8_t TWIReadNACK(void);
uint8_t TWIGetStatus(void);
[/code:10la03bv]

Die Basisfunktionen für die I²C/TWI-Kommunikation:

[code:10la03bv]///////////////////////////
//
// TWI
//
///////////////////////////

void twi_init(void)
{
//set SCL to 400kHz
TWSR = 0x00;
TWBR = 0x0C;

//enable TWI
TWCR = (1<<TWEN);
}

//Send start signal
void twi_start(void)
{
TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
while ((TWCR & (1<<TWINT)) == 0);
}

//send stop signal
void twi_stop(void)
{
TWCR = (1<<TWINT)|(1<<TWSTO)|(1<<TWEN);
}

void twi_write(uint8_t u8data)
{
TWDR = u8data;
TWCR = (1<<TWINT)|(1<<TWEN);
while ((TWCR & (1<<TWINT)) == 0);
}

uint8_t TWIGetStatus(void)
{
uint8_t status;
//mask status
status = TWSR & 0xF8;
return status;
}
[/code:10la03bv]

Und jetzt noch die höheren Funktionen, um etwas auf dem OLED anzuzeigen:

[code:10la03bv]////////////////////////////////
//
// OLED commands
//
///////////////////////////////
void oled_command(int value)
{
twi_start();
twi_write(0x78);
twi_write(0x00);
twi_write(value);
twi_stop();
}

void oled_init(void)
{
oled_command(0xae);

oled_command(0xa8);//Multiplex ratio
oled_command(0x3F);

oled_command(0xd3);
oled_command(0x00);
oled_command(0x40);
oled_command(0xa0);
oled_command(0xa1);

oled_command(0x20); //Adressing mode
oled_command(0x00); //HOR

oled_command(0xc0);
oled_command(0xc8);
oled_command(0xda);
oled_command(0x12);
oled_command(0x81);
oled_command(0xfF);
oled_command(0xa4); //Display ON with RAM content
oled_command(0xa6); //Normal display (Invert display = A7)
oled_command(0xd5);
oled_command(0x80);
oled_command(0x8d);
oled_command(0x14);
oled_command(0xAF); //Display ON

}


//////////////////////////////////
//
// OLED functions
//
/////////////////////////////////
//Print character in normal size
//Write 8 vertical bits to given col (0..127) and page (0..7)
void oled_write_byte(int col, int page, int val)
{
int t1;

oled_command(0x21); //COL
oled_command(col);
oled_command(col);

oled_command(0x22); //PAGE
oled_command(page);
oled_command(page);

twi_start();
twi_write(0x78);
twi_write(0x40); //Data
for(t1 = 0; t1 < 7; t1++)
{
twi_write(val);
}
twi_stop();
}

void oled_cls(void)
{

int x, y;
for(x = 0; x < 128; x++)
{
for(y = 0; y < 8; y++)
{
oled_write_byte(x, y, 0);
}
}

}

//Print one character in normal size to OLED, *inv*ert if neccessary (inv = 1)
void oled_putchar1(int col, int row, char ch1, int inv)
{
int p, t1;
char ch2;
int c = col;

p = (5 * ch1) - 160;
for(t1 = 0; t1 < 5; t1++)
{
if(!inv)
{
ch2 = fontchar[p + t1];
}
else
{
ch2 = ~fontchar[p + t1];
}

oled_write_byte(c++, row, ch2);
}

if(!inv)
{
oled_write_byte(c, row, 0x00);
}
else
{
oled_write_byte(c, row, 0xFF);
}

}

//2^x
int xp2(int xp)
{
int t1, r = 1;
for(t1 = 0; t1 < xp; t1++)
{
r <<= 1;
}
return r;

}


//Print character in double size, inv=1 => inverted
void oled_putchar2(int col, int row, char ch1, int inv)
{
int p, t1, t2, x;
int b, b1, b2;
char colval;

p = (5 * ch1) - 160;

for(t2 = 0; t2 < 6; t2++)
{
//Get vertical byte data of char
if(!inv)
{
colval = fontchar[p];
if(t2 == 5)
{
colval = 0;
}
}
else
{
colval = ~fontchar[p];
if(t2 == 5)
{
colval = 255;
}
}

b = 0;
x = 1;

for(t1 = 0; t1 < 7; t1++)
{
if(colval & x)
{
b += xp2(t1 * 2);
b += xp2(t1 * 2 + 1);
}
x <<= 1;
}

b1 = b & 0xFF; //Lower byte
b2 = (b & 0xFF00) >> 8; //Upper byte

//Print data to screen
oled_write_byte(col + t2 * 2, row, b1);
oled_write_byte(col + t2 * 2, row + 1, b2);
oled_write_byte(col + t2 * 2 + 1, row, b1);
oled_write_byte(col + t2 * 2 + 1, row + 1, b2);
p++;
}

}

//Print string in given size (lsize=0 => normal height, lsize=1 => double height)
void oled_putstring(int col, int row, char *s, char lsize, int inv)
{
int c = col;

while(*s)
{
if(!lsize)
{
oled_putchar1(c, row, *s++, inv);
}
else
{
oled_putchar2(c, row, *s++, inv);
}
c += (lsize + 1) * 6;
}
}

//Print an integer/long to OLED
void oled_putnumber(int col, int row, long num, int dec, int lsize, int inv)
{
char *s = malloc(16);
if(s != NULL)
{
int2asc(num, dec, s, 16);
oled_putstring(col, row, s, lsize, inv);
free(s);
}
}

void oled_clear_section(int x1, int x2, int row)
{
int t1;
for(t1 = x1; t1 < x2; t1++)
{
oled_write_byte(t1, row, 0);
}

}
[/code:10la03bv]

Der Initialisierungsteil in main()

[code:10la03bv]int main(void)
{

//[..bla bla bla entfernt...]

twi_init();
oled_init();
oled_cls();

//[..bla bla bla entfernt...]

}

[/code:10la03bv]

Abschließend noch etwas Hilfskram:

[code:10la03bv]/********************************/
//
// STRING FUNCTIONS
//
/*******************************/
//INT 2 ASC
int int2asc(long num, int dec, char *buf, int buflen)
{
int i, c, xp = 0, neg = 0;
long n, dd = 1E09;

if(!num)
{
*buf++ = '0';
*buf = 0;
return 1;
}

if(num < 0)
{
neg = 1;
n = num * -1;
}
else
{
n = num;
}

//Fill buffer with \0
for(i = 0; i < 12; i++)
{
*(buf + i) = 0;
}

c = 9; //Max. number of displayable digits
while(dd)
{
i = n / dd;
n = n - i * dd;

*(buf + 9 - c + xp) = i + 48;
dd /= 10;
if(c == dec && dec)
{
*(buf + 9 - c + ++xp) = '.';
}
c--;
}

//Search for 1st char different from '0'
i = 0;
while(*(buf + i) == 48)
{
*(buf + i++) = 32;
}

//Add minus-sign if neccessary
if(neg)
{
*(buf + --i) = '-';
}

//Eleminate leading spaces
c = 0;
while(*(buf + i))
{
*(buf + c++) = *(buf + i++);
}
*(buf + c) = 0;

return c;
}

//STRLEN
int strlen(char *s)
{
int t1 = 0;

while(*(s + t1++));

return (t1 - 1);
}
[/code:10la03bv]

So, das sollte alles sein. Ich bin beim Kommentieren immer etwas nachlässig. Falls also Fragen sind, nur zu! ;-)

vy 73 de Peter


  
 

Elektronikforum Elektroshop PostgreSQL Forum