Forum: Mikrocontroller und Digitale Elektronik ATmega SPI und Programmierschnittstelle


von Andy _. (various_n)


Lesenswert?

Hallo !

Ich möchte mir eine kleine Controllerbox bauen womit ich schnell 
experimentieren kann.

Geplant ist eine leine Box mit Akku 16x2 oder 20x4 LCD und ein paar 
Tastern sowie möglichst vielen IO pins.
Controller würde ich gern einen Mega8/16 oder 328 einsetzen.

Kein Xmega aufgrund der Preise und der schlechten austauschbarkeit bei 
defekt.


Nun zu meinem Problem:

Da die Megas über die SPI schnitstelle programmiert werden ist diese ja 
belegt.
Ich möchte allerdingens gern noch 2 weitere geräte wie z.b. einen 
nRF24L01 und einen RC522 anschließen können.

Wie kann ich alles gleichzeitig nutzen ?

Denn ich weiß noch das ich damals den µC nicht programmieren konnte 
solange der nRF24 drann war.

Da mir momentan die Zeit & Hardware Fehlt alles einzeln auszuprobieren 
bitte ich euch um ein paar tipps wie ich das umsetzen könnte.

von (prx) A. K. (prx)


Lesenswert?

Andy _. schrieb:
> Da die Megas über die SPI schnitstelle programmiert werden ist diese ja
> belegt.

Nicht unbedingt.

> Ich möchte allerdingens gern noch 2 weitere geräte wie z.b. einen
> nRF24L01 und einen RC522 anschließen können.

Mit Pullups an den CS-Leitungen von SPI-Slaves gibt es zwischen SPI und 
ISP keinen Konflikt. Ein ISP-Programmer mischt nur bei aktivem Reset 
mit.

Manche SPI-Slaves haben solche Pullups bereits eingebaut.

Man kann das auch per Multiplexer trennen. Nötig ist das aber bei 
SPI-Slaves mit CS-Leitung nicht.

: Bearbeitet durch User
von Georg G. (df2au)


Lesenswert?

SPI mit Widerständen entkoppeln (AppNote von AVR gibt es, auch diverse 
Threads dazu hier im Forum). Alternativ einen Bootlader verwenden. Der 
kann per Ethernet seine Daten holen. Das kann man sogar automatisieren.

von Rudolph R. (rudolph)


Lesenswert?

Andy _. schrieb:
> Kein Xmega aufgrund der Preise und der schlechten austauschbarkeit bei
> defekt.

Was meinst Du mit schlechter Austauschbarkeit?
Wegen SMD? Pins am Gehäuse trennen, Pins auslöten, Pads etwas von 
Lötzinn befreien, neuen Controller einlöten, fertig. Das geht sogar mit 
einem Cutter-Messer wenn man vorsichtig ist, vor allem bei kleineren 
Pins.
Für die verhältnismässig breiten Pins von einem ATMega benutze ich einen 
feineren Seitenschneider.

Auf der anderen Seite gehen die ja nicht "einfach so" kaputt.

Alternativ schau Dir mal die ATMega164PA/324PA/644PA/1284P an, das mit 
dem SPI ist so an sich zwar kein Problem, die hätten dann aber auch 
JTAG.

von Andy _. (various_n)


Lesenswert?

Vielen dank für eure Antworten!

Das Entkoppeln werde ich ausprobieren :)


Der Tipp mit dem abschneiden der Pins ist auch gut solange man keine 
leiterbahnen unter den Chip führt.

Kann ich gleich bei meinem Netzteil ausprobieren da ich den 7106 
A/D(qfp44) wandler mit hochspannung zerschossen hab :P

Glaub zusätzlich zu der zenerdiode werde ich wohl noch einen varistor 
als überspannungsschutz einlöten.


Danke noch einmal!

Ich werde mich melden wenn es im projekt voran geht sofern ich es nicht 
vergesse ;)

Gruß
Andy

von Wolfgang (Gast)


Lesenswert?

Andy _. schrieb:
> Da mir momentan die Zeit & Hardware Fehlt alles einzeln auszuprobieren
> bitte ich euch um ein paar tipps wie ich das umsetzen könnte.

Kauf dir eine Arduino Clone (Pro Mini oder Mini USB Nano) für weniger 
als 3€. Dann hast du einen ATmega328 inklusive Bootloader und kannst mit 
den SPI-Pins machen, was du möchtest.

Wenn du allerdings "möglichst viele IO-Pins" haben möchtest, wäre 
vielleicht ein Arduino-Due mit einem ARM Prozessor auch eine 
Möglichkeit. Das Austauschen liefe dann allerdings wohl auf einen 
Neukauf für um die 12€ hinaus.

von Andy _. (various_n)


Lesenswert?

Ja die 328p boards hatte cih schon bestellt und werde die vorerst 
nutzen.

Leider haben meine einen 8MHz resonator.
Mal sehen ob ich da noch einen 16Mhz quarz einlöte.

Wie entferne ich einen eventuellen bootloader ?
Ich programmiere direkt und brauche so einen unsinn nicht.

Es sei denn ich könnte das teil mit Bascom direkt über USB 
programmieren.


Mein 20x4 LCD ist auch da jedoch habe ich wegen der geschwindigkeit 
bedenken :(

Habe mal gemessen und bei meinem 16*2 in 4bit mode sendet er die beiden 
4-bit hälften in 200us und wartet dann 1ms bis zum nächsten bit.

Das ist viel zu lange.

Bei 4x20 byte sind dass dann:
1,2ms x 80 = ~96 eher 100ms
im 8-bit mode spaart man dann ja nur 8ms (80x 0,1ms)

Bei einem refresh von nur 5hz währe der µC 50% der zeit nur mit dem Lcd 
beschäftigt -.-

Kann man die wartezeit verkürzen ?

Gruß

von Manfred (Gast)


Lesenswert?

Wolfgang schrieb:
> Kauf dir eine Arduino Clone (Pro Mini oder Mini USB Nano) für weniger
> als 3€. Dann hast du einen ATmega328 inklusive Bootloader und kannst mit
> den SPI-Pins machen, was du möchtest.

Das hätte ich gerne mal erklärt:
Arduino Pro Mini ist klar, da sind Rx und Tx herausgeführt, allerdings 
klemme ich an diese ja den USB-Adapter an, wenn ich flashen will. Damit 
bekomme ich doch die gleiche Kollision, wie vom Fragesteller erwähnt?

Der Nano hat eine USB-Buchse und den Interfacebaustein auf dem Board, 
damit ist die Serielle nicht mehr frei verfügbar.

Wenn ich die Serielle brauche, würde ich dazu neigen, den AVR per 
ISP-Adapter zu beladen, dessen China-Luxusversion hat mich immerhin 
$4,99 gekostet.

von spess53 (Gast)


Lesenswert?

Hi

>Habe mal gemessen und bei meinem 16*2 in 4bit mode sendet er die beiden
>4-bit hälften in 200us und wartet dann 1ms bis zum nächsten bit.

>Das ist viel zu lange.

Ja. Wer programmiert so einen Unsinn?

>Bei einem refresh von nur 5hz währe der µC 50% der zeit nur mit dem Lcd
>beschäftigt -.-

>Kann man die wartezeit verkürzen ?

Warum Refresh? Beschreibe einfach das Display nur wenn sich etwas ändert 
und nur dort, wo sich etwas ändert.

MfG spess

von Andy _. (various_n)


Lesenswert?

Ich habe einen ohne usb buchse.

Hier der Link
http://www.ebay.de/itm/282097732370?_trksid=p2060353.m2749.l2649&ssPageName=STRK%3AMEBIDX%3AIT

Bei einem preis von unter 2€ denke ich kann man damit schon etwas 
anfangen.

Trotzdem reitzt mich ein mega 16/32 wegen der anzahl der pins :)
Der 1284P-AU währe natürlcih der Hammer kostet aber auch 8€..

Bei meinen Experimenten kann der schnell mal schaden nehmen :/

von Andy _. (various_n)


Lesenswert?

Das dauert mit trotzdem zu lange !

Habe schon öfters ärger wegen dem Display gehabt :(
überleg mal... 100ms selbst bei nur 1 Zeile sind es noch 25ms das ist 
ewig lange.


Was will ich mit einem Bootloader ?
Ist nur eine weitere fehlerquelle.

von Bernd K. (prof7bit)


Lesenswert?

Rudolph R. schrieb:
> Pins am Gehäuse trennen, Pins auslöten, Pads etwas von
> Lötzinn befreien, neuen Controller einlöten, fertig. Das geht sogar mit
> einem Cutter-Messer

Und mit Heißluft geht es sogar ohne so ein mechanisches Herumgewürge.

SMD ist ein Segen für den Hobbybastler, noch nie war es so einfach 
Platinen zu bestücken oder auch Bauteile zu tauschen, ich denke nur noch 
mit Grausen an die alte Durchlochzeit zurück, ellenlanges Gebohre, 
umständliches Bestücken (Abstützen von unten), Der Spaß beim Auslöten 
von Bauteilen war proportional zu Bauhöhe geteilt durch Anzahl der Pins, 
Keramische Scheibenkondensatoren verursachten gerne Brandblasen an den 
Fingern, etc.

: Bearbeitet durch User
von Andy _. (various_n)


Lesenswert?

ÄH was ?

SMD ist für den Hobbybereich der letzte mist !
Ohne sündhaft Teure Werkzeuge und tonnenweise zeit kann man das Thema 
knicken.
Ich Bastel schon seid 10 Jahren... SMD nein Danke.

Ach und wer so Blöde ist und beim Löten an die beinchen fässt ist selber 
schuld.
Wer vernünftig Lötet verbrennt sich auch die Finger nicht.

Die vorteile die du bei SMD nennst kann ich überhaupt nicht 
nachvollziehen. eher im gegenteil.


Kleines Beispiel:
Durch die Goßen bauteile und deren position auf der anderen seite kann 
ich mir viele jumper sparen.
Das ist layoutmäßig schon mal viel wert.

Trotzallem hilft mir das bei meinem LCD problem nicht weier :(

von Manfred (Gast)


Lesenswert?

Andy _. schrieb:
> Ich habe einen ohne usb buchse.
> Hier der Link
> Ebay-Artikel Nr. ****

Unseriöse Handelsumgebung und zu teuer!

https://www.aliexpress.com/item/Free-Shipping-new-version-1pcs-ATMEGA328P-Pro-Mini-328-Mini-ATMEGA328-5V-16MHz-for-Arduino/32665418223.html

von Manfred (Gast)


Lesenswert?

Andy _. schrieb:
> Das dauert mit trotzdem zu lange !
>
> Habe schon öfters ärger wegen dem Display gehabt :(
> überleg mal... 100ms selbst bei nur 1 Zeile sind es noch 25ms das ist
> ewig lange.

Deutsche Sprache schwere Sprache? Ärger wegen des Displays, Gruß an 
Verona.

Ich klemme meine 16x2-LCD per I2C an und brauche um 25ms für die Zeile. 
Theoretisch könnte ich die also vierzig mal pro Sekunde beschreiben - 
leider kommt das LCD da garnicht mit und ich als Mensch kann dem schon 
garnicht folgen. Was hat der Arduino so dringend zu tun, dass er nicht 
gelegentlich mal 25ms Pause machen kann?

Dazu hast' schon einen sinnvollen Hinweis bekommen:

spess53 schrieb:
> Warum Refresh? Beschreibe einfach das Display nur wenn sich etwas ändert
> und nur dort, wo sich etwas ändert.

Also neuen Wert erzeugen, prüfen, ob Abweichung zum bestehenden Wert 
größer [sinnvolle Abweichung] ist und nur dann in die Display-Routine 
springen.

von Draco (Gast)


Lesenswert?

Manfred schrieb:
> Unseriöse Handelsumgebung und zu teuer!
>
> 
https://www.aliexpress.com/item/Free-Shipping-new-version-1pcs-ATMEGA328P-Pro-Mini-328-Mini-ATMEGA328-5V-16MHz-for-Arduino/32665418223.html

Also dann aber Ali als seriös zu titulieren, da gehört ne Menge Mut 
dazu! :'D :'D

von Georg G. (df2au)


Lesenswert?

Andy _. schrieb:
> Habe mal gemessen und bei meinem 16*2 in 4bit mode sendet er die beiden
> 4-bit hälften in 200us und wartet dann 1ms bis zum nächsten bit.

Dann wirf mal einen Blick ins Datenblatt. Da hast du noch heftig 
Verbesserungspotenzial. Dein LCD Treiber ist etwas seltsam, man könnte 
sagen arduinisch, programmiert.

von Andy _. (various_n)


Lesenswert?

Ist nicht mein Treiber sondern der von Bascom.

Ich könnte ja versuchen das ganze zu modifizieren .

Selber bauen will ich den nicht unbedingt weil dies sicher ein 
erheblicher aufwand währe.

von Jobst M. (jobstens-de)


Lesenswert?

spess53 schrieb:
>>Habe mal gemessen und bei meinem 16*2 in 4bit mode sendet er die beiden
>>4-bit hälften in 200us und wartet dann 1ms bis zum nächsten bit.
>
>>Das ist viel zu lange.
>
> Ja. Wer programmiert so einen Unsinn?

Das kommt darauf an, wo die Ursache liegt.
Bei meinen Aufbauten wird auch nur ein Zeichen in einer ms (+/-) auf das 
Display geschrieben. Das liegt einfach daran, dass dies im IRQ passiert.
Ich denke nicht, dass das Unsinn ist.


Andy _. schrieb:
> Ich Bastel schon seid 10 Jahren... SMD nein Danke.

Ich bastel schon seit 40 Jahren. SMD? Ja, gerne!
Man kann seine Boards viel effizienter nutzen (Rückseite!), Bauteile mit 
vielen Beinchen sind schneller getauscht oder auch eingelötet. (TQFP mit 
64 Beinchen dauert ca. 30 sek.)


Andy _. schrieb:
> Trotzdem reitzt mich ein mega 16/32 wegen der anzahl der pins :)
> Der 1284P-AU währe natürlcih der Hammer kostet aber auch 8€..

Wer auf große Gehäuse setzt, muss eben zahlen. Und bei den AVRs sowieso. 
Man bekommt größere ARMs oder 8051 für 1,50. Aber eben nicht DIL oder 
PLCC.



Gruß

Jobst

von Andy _. (various_n)


Lesenswert?

Ich Habe mich vorerst für den Atmega 16/32 entschieden da dieser 
pinmäßig kompatibel zu den größeren 164,324,644,1264 ist.

Ich kann dann später bei bedarf leicht upgraden.
Jetzt muss ich mich nur noch zwischen Pdip und TQFP entscheiden.

Falls ich etwas kaputt mache ist ein Pdip natürlich besser und 2 Pdip 
controller habe ich auch da.

Da komme ich zur nächsten frage:

Wie könnte ich die pins am besten schützen ?
Habe an 6,8v überspannungsschutzdioden gedacht weiß aber nicht ob die 
den Controller ausreichend schützen.

Im Datenblatt ist die Maximalspannung mit 6v und +0,5v zu Vcc angegeben.
mit 7V bin ich da deutlich drüber.
Würde das ein controller bezieungsweise die ports überleben ?

Meine nächste frage ist ob es in euren augen sinn macht anstatt 4 LED´s 
vielleicht insgesamt 8 je eine links und rechts pro zeile des LCD zu 
installieren und die mit schieberegistern zu schalten.
Ich könnte acuh versuchen 2-Farben led´s zu nutzen.
Habe nämlich am ende mit 4 Led´s nur 12 IO´s frei.

Die sind für eine kleine rückmeldung deutlich zeitsparender als ein 
100ms LCD ;)

Gruß

von Andy _. (various_n)


Angehängte Dateien:

Lesenswert?

So ich habe das Projekt wieder in die Hand genommen.

Ein Prototyp mit ein paar fehlern hab ich auch gebaut :)


Es sind nun 4 RGB Led´s mit 2 Schieberegistern angeschlossen.
Mit einem 16 MHz quarz jage ich dort 2 bytes in nur ~20µs durch.

Die geschwindigkeit der Schieberegister ist schon etwas faszinierend ,da 
es so einfach geht :)

Da ich noch einige änderungen im layout gemacht hab wird das ganze noch 
ein wenig länger dauern.



PS:
Habe im Test mit einem RGB lauflicht, meiner Kamera mit 1000FPS und 
1/40000 Belichtung alle Farben in einer Led.
Somit schaltet die Led schneller um als der Sensor der Kamera gelesen 
wird :)
Und der Sensor ist ebenfalls schneller als die Kamera cpu.

von Thomas (kosmos)


Lesenswert?

nimm doch ein Mega2560 Arduino, der sollte doch genug Pins haben und 
rausgeführt sind die auch.

Für LCD Sachen habe ich früher immer gerne einen 8 bit Latch 74HC573N 
genommen um bei den Tinys noch ausreichend Pins übrig zu haben ohne den 
4bit Mode nutzen zu müssen.

Man übergibt die 8 Bit an das Latch kann dann dessen Eingänge hochohmig 
schalten und dann den Port anderweitig verwenden sogar als Eingang 
umzuschalten für ADC Sachen.

: Bearbeitet durch User
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.