Forum: Projekte & Code Digital Clock mit STM32F4, GPS Modul und 7 Segment MAX7219 Modul


von Aa B. (aaab)


Angehängte Dateien:

Lesenswert?

In diesem Projekt habe ich eine Digitale Uhr gebaut.
Die Zeit wird von GPS Modul geholt, angezeigte Zeit ist sehr präzis. Der 
Format ist eigentlich in UTC Format ausgegeben, wird aber in Software 
angepasst.

https://eckstein-shop.de/UART-GPS-NEO-6M

Die Zeit wird geparst von empfangenen Daten aus dem Modul. Diese Modul 
schickt Daten in NMEA-0183 Protocol.
https://en.wikipedia.org/wiki/NMEA_0183

Ein Buffer von Daten wird über USART über DMA empfangen, ein Interrupt 
wird ausgelöst wenn 384 bytes in dem Fall, empfangen ist.

Diese String wird über SPI Leitung an eine 8 Digit LED Display 
Modul(MAX7219) übermittelt.

https://eckstein-shop.de/8-Digit-LED-Display-Digital-Tube-Red-MAX7219

Hier ist das Projekt mit Source code und allem: :)

https://github.com/abtom87/DigitalClock-SPI_GPSTime_STM32F4

Die Software habe ich mit SW4STM32 AC6, eine Eclipse basierte 
Open-source IDE entwickelt, und nur mit Standard Preipheral Libraries, 
OHNE MXCUBE. :)))

Ich hatte nur Serial port(USART) und Logikanalyzer zur Verfügung für 
Debugzwecke. Ich habe versucht mehrmals OPENOCD in mein IDE zu 
integrieren aber hat es nicht funktioniert.

: Bearbeitet durch User
Beitrag #5347651 wurde vom Autor gelöscht.
von Aa B. (aaab)


Lesenswert?

So, jetzt habe ich den Projekt mit ein kleiner Twist bisschen 
upgegradet, und zwar, mit FreeRTOS. :)

https://github.com/abtom87/FreeRTOS_SPI_Serial_GPS

Es gibt jetzt, insgesamt 3 Tasks, ein Task ist wie ein Dummy Task, der 
onboard LEDs togglet und ein string ausgibt.

Der zweite Task wartet auf eine Semaphore die von DMA IRQ gegeben wird 
und wenn dass passiert, Infos aus dem DMA Buffer werden in einem lokalen 
buffer kopiert, nur die Zeit wird geparst und über LED Display MAX7219 
(SPI) angezeigt.

Der dritte Task wartet auf eine Semaphore die von ein andere USART Rx 
IRQ gegeben wird, d.h es gibt ein IRQ handler um eine Zeichen von User 
zu empfangen. Und dieses event ist auch wie der DMA interrupt, 
asynchron.  Jetzt ist es so programmiert das wenn der User irgendeinem 
Zeichen über Terminal eingibt, dieses Zeichen wird empfangen und 
ausgegeben. Ich wollte es so machen dass, wenn Man das Zeichen "d" 
tippt, das Datum auf der LED Display angezeigt wird. Ein "Nice to have" 
feature. Das Problem ist nur dass, das entsprechende GPS Infos 
(http://www.gpsinformation.org/dale/nmea.htm#ZDA) wegen Datum können 
Indoors leider nicht empfangen werden.

/***************/
Tool chain Setup
/***************/
IDE- OpenSW4STM32
Compiler- ARM-GCC
Debugger-OpenOCD
OS- Ubuntu 16.04
Flash tool- ST-Link (https://github.com/texane/stlink)

/***************/
Hardware Setup
/***************/
Evalboard- STM32F411 Discovery Kit 
(http://www.st.com/en/evaluation-tools/32f411ediscovery.html)
LED Dislay - MAX7219 / Segment Display 
(https://eckstein-shop.de/8-Digit-LED-Display-Digital-Tube-Red-MAX7219)
GPS Module - UART-GPS-NEO-6M (https://eckstein-shop.de/UART-GPS-NEO-6M)
USB Serial Konverter.

Die FreeRTOS version verwendet hier ist v9.0.0. Ich habe nur ein paar 
APIs von FreeRTOS verwendet, um tasks zu erstellen und konfigurieren mit 
stack size, priority etc
1
xTaskCreateStatic
, um den scheduler zu starten
1
vTaskStartScheduler
. Einige APIs wurden verwendet um ISR und Handler Task miteinander zu 
synchronisieren, diese sind
1
 xSemaphoreGiveFromISR
 der in ein ISR aufgerufen wird , und
1
 xSemaphoreTake
 der in einer entsprechende Handler task aufgerufen wird.

Ich finde FreeRTOS wirklich genial, ich habe nur einige APIs verwendet, 
habe kaum an der Oberfläche gekratzt. Es gibt so viele APIs die man 
verwenden kann. Ich bin immer noch nicht so ganz zufrieden mit der 
Design, bin noch am lernen also, es gibt bestimmt ein bessere Weg die 
Tasks nochmal zu zerteilen, ich meine mit Queues oder so kann man den 
GPS Task besser managen.


Also wenn einer oder anderer von euch Tipps/Vorschläge habt, ich höre 
zu. Ich bin noch am lernen, und echt-Zeit System lernt man wirklich wenn 
man die Hands-on verwendet hat.

von W.S. (Gast)


Lesenswert?

Aa B. schrieb:
> In diesem Projekt habe ich eine Digitale Uhr gebaut.

Und wo ist die Uhr?

Ich sehe nur ein Steckbrett und ein ST-Discovery-Brettl. Und gesteckte 
Drähte.

W.S.

von Aa B. (aaab)


Lesenswert?

W.S. schrieb:
> Und wo ist die Uhr?
> Ich sehe nur ein Steckbrett und ein ST-Discovery-Brettl. Und gesteckte
> Drähte.
> W.S.

Ich glaube Sie meinen/erwarten ein richtige PCB wo alle Teile gelötet 
sind, ich habe das so nicht gemacht sondern auf ein Breadboard. Ich 
denke ich muss mein Originale post umformulieren.

von W.S. (Gast)


Lesenswert?

Aa B. schrieb:
> Ich glaube Sie meinen/erwarten ein richtige PCB

Nö, ich hätte ein richtiges Gerät erwartet. Also etwas, das man seiner 
Ehefrau schenken kann, also mit richtigem Gehäuse, Stromversorgung und 
so weiter. Eben etwas, das den Namen 'Projekt' verdient.

Stattdessen sehe ich eine Art Beschreibung, was du so an IDE, St-Lib und 
dergleichen verwendet hast, daß du 384 Bytes aus einem GPS-Modul 
gesammelt hast und daß du für die 4800 Baud mit dem UART auch noch DMA 
benutzt hast.

Ich will dich wahrlich nicht abbringen von deinem Basteln, schließlich 
macht es dir Freude und das soll so sein. Aber ein Projekt braucht denn 
doch etwas mehr.

W.S.

von Aa B. (aaab)


Lesenswert?

W.S. schrieb:

> Nö, ich hätte ein richtiges Gerät erwartet. Also etwas, das man seiner
> Ehefrau schenken kann, also mit richtigem Gehäuse, Stromversorgung und
> so weiter. Eben etwas, das den Namen 'Projekt' verdient.
>
Da haben Sie leider recht. Wenn ich verheiratet wäre und mit diese Frau 
auch verheiratet bleiben möchte dann ist diese bastelaktion als Geschenk 
kein gute Idee.:)

 Ich bin mir nicht sicher ob sie mein 2te Post von dem Thread gelesen 
haben aber, der Inhalt allgemein ist sehr Softwarelastig. Also es würde 
mich freuen wenn eine oder der andere Software Bruder davon profitieren 
kann, weil ich selber auch von diese Forum über AVR und STM32 vieles 
gelernt habe.

Deshalb habe ich die Infos und Code die man über mein GitHub Link sehen 
kann, hier gepostet, und dadurch kann jemand was lernen oder ich kann 
selber mein SW verbessern, wenn jemand ein Anregung hat :)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.