Go Down

Topic: 4 zu 16 Decoder in anderer Form (Read 14293 times) previous topic - next topic

R1der

Bin endlich zum basteln gekommen.

Verwende nun 4 SR und alle funktioniert prima. Danke nochmal für die empfehlung.

Möchte nun mein erstes Projekt mit einem einzelnen Mikrokontroller realisieren. Aus platzgründen kann ich kein fertiges Board nehmen.

Das erste Board mit den SR und den LED ist fertig. Das nächste Board kommt drunter und beinhaltet ein Netzteil, Kopplung zu externen Signalen (Optokoppler), Mikrocontroller und eine Programmierschnittstelle.

Da tuen sich jetzt ein paar Fragen auf.

1. Welcher Controller?
Mindestanforderung:
-13 DO für die SR
-min 1 externen Interrupt
-min 1 AI

2. Wie baue ich die Programmierschnittstelle auf? Was muss ich dabei beachten? Will den Controller mit einem 2560 programmieren können.

Wäre euch für Infos sehr dankbar

Serenifly

13 I/Os für 4 Schieberegister? Wieso schaltest du die nicht in Serie und schiebst von einem SR ins nächste?




R1der

ich hatte es probiert und war damit nicht wirklich zurechtgekommen.

Wäre die notlösung.

Schachmann

Wenn es Dir auch reichen würde, das nach der Eingangs-Wahrheitstabelle 16 Ausgänge geschaltet werden, würde ein 4514 passen.

Gruß,
Ralf

R1der

das Thema ist durch. Verwende den 74HC595 Schieberegister. Trotzdem danke

R1der

@Serenifly

Könntest du mir das in Serie schalten erläutern?
Ich nutze die standart shiftOut()-Funktion...

Für in Serie schalten nutze ich ja den Seriell-out pin am IC, nur wie schicke ich die Daten richtig?
Code: [Select]
    digitalWrite(latch_1,LOW);
    shiftOut(data_1,clock_1,MSBFIRST,shift[8]);
    digitalWrite(latch_1,HIGH);
   
    digitalWrite(latch_2,LOW);
    shiftOut(data_2,clock_2,MSBFIRST,shift[0]);
    digitalWrite(latch_2,HIGH);
   
    digitalWrite(latch_3,LOW);
    shiftOut(data_3,clock_3,MSBFIRST,shift[0]);
    digitalWrite(latch_3,HIGH);
   
    digitalWrite(latch_4,LOW);
    shiftOut(data_4,clock_4,MSBFIRST,shift[0]);
    digitalWrite(latch_4,HIGH);


So schiebe ich die Daten zurzeit rüber, wodurch auch die 12 I/O's zustande kommen. den 13. nutze ich am anfang um die Ausgänge zu verriegeln, bis ich den Speicher gelöscht habe nach dem einschalten.

Serenifly

Du musst hardware-seitig Q7' (Pin 9) mit den Eingang (Pin 14) des jeweils nächsten SRs verbinden. Clock und Latch gehen auf alle SR gleichzeitig.

Bei zwei SR die so verbunden sind macht man dann einfach zweimal shiftOut zwischen den digitalWrites. Das geht auch mit 4 SR. Du musst dann halt 4 mal shiftOut machen und dann erst Latch auf High.

Siehe hier ganz am Ende:
http://arduino.cc/en/Tutorial/ShiftOut

R1der

Jetzt versteh ich es :)

Manchmal besser da zweimal drüber zu gehen und das ganze nicht mitten in der Nacht...

Baue gleich mal einen versuch auf und schreib meinen Code ein wenig um.

Danke dir.

Gut, nun haben sich die Mindestanforderungen an den Mikrocontroller reduziert:
-13 4 I/O
und der Rest von oben

Wie realisiere ich die Programmierstelle am besten? Bzw wo kann ich mich als anfänger einlesen?

Serenifly

#38
Sep 16, 2013, 07:33 pm Last Edit: Sep 16, 2013, 07:35 pm by Serenifly Reason: 1
Und wegen der µC Programmierung mit dem Mega, siehe hier:
http://www.instructables.com/id/How-to-use-Arduino-Mega-2560-as-Arduino-isp/

Du kannst dazu den Atmega328P-PU nehmen wenn dir die Pins reichen. Das ist der gleiche Chip wie auf dem UNO.

Die Anleitung ist im Prinzip genau wie wenn man den UNO als ISP verwendet:
http://arduino.cc/en/Tutorial/ArduinoISP
http://arduino.cc/en/Tutorial/ArduinoToBreadboard

Nur dass das SPI-Interface beim Mega auf anderen Pins liegt

R1der

Vielen Dank. Arbeite mich da ein.

Hoffe ihr nehmt es mir nicht übel, dass ich frage, statt stundenlang zu suchen :smiley-roll-blue:

Serenifly

#40
Sep 16, 2013, 07:57 pm Last Edit: Sep 16, 2013, 08:20 pm by Serenifly Reason: 1
Da du sagst, dass du Platz sparen willst, kann du auch einen Arduino Pro Mini nehmen wenn dir die Pins reichen:
http://www.ebay.de/itm/Arduino-Pro-Mini-ATMEGA328P-5V-Makers-Robotics-/130993627910?pt=UK_BOI_Electrical_Components_Supplies_ET&hash=item1e7fd42306

Und in einen richtiges Programmiergerät nehmen. z.B.:
http://www.ebay.de/itm/ATMEL-AVR-ISP-USBasp-programmer-green-/321204723107?pt=LH_DefaultDomain_212&hash=item4ac94b1da3


Damit sparst du dir das Gefummel mit dem Arduino als ISP. Und mit dem Mega kann man anscheinend sowieso nur den Bootloader auf einen leeren Atmega flashen! Dann muss man das Ding immer noch programmieren und dazu muss man anscheinend den Chip entfernen, was auf dem Mega natürlich nicht geht. Es sei denn ich übersehe da was...
Oder hast du auch einen UNO? Wenn ja, kann man den als Programmiergerät, sowohl für Standalone Chips oder den Mini nehmen.

Oder eigene Platine mit Atmega328 und einem Programmiergerät. Die Investition ist wahrscheinlich das einfachste.



R1der

Morgen.

Wenn ich das ganze jetzt richtig verstanden habe, muss ich auf einem jungfräulichen Chip den Bootloader kriegen.
Anschließend kann ich den über ISP mit dem Programmer schreiben.

Habe nun folgenden Chip sowie Programmer:
http://www.ebay.de/itm/161098710476?ssPageName=STRK:MEWNX:IT&_trksid=p3984.m1497.l2649

http://www.ebay.de/itm/251378413821?ssPageName=STRK:MEWNX:IT&_trksid=p3984.m1497.l2649

Jetzt brauche ich halt die Software für den Upload der HEX-File, wo kann ich die beziehen?
Kann ich mit dem Programmer auch den Bootloader übertragen?

uwefed

#42
Nov 19, 2013, 07:47 am Last Edit: Nov 19, 2013, 07:49 am by uwefed Reason: 1
Quote
Wenn ich das ganze jetzt richtig verstanden habe, muss ich auf einem jungfräulichen Chip den Bootloader kriegen.
Anschließend kann ich den über ISP mit dem Programmer schreiben.

Nein.
Den Bootlader brauchst Du nur, wenn Du über seriell den Sketch laden willst. Über ISP kannst Du mit dem Programmierer direkt den Sketch laden und die Fuse ändern.
Die Software zum ISP ist im IDE mitgeliefert. Du kannst den Upload auch über die ISP machen.
Der ATmega für 1,69€ kommt mir arg billig vor.
Grüße Uwe

R1der

#43
Nov 20, 2013, 07:58 am Last Edit: Nov 20, 2013, 08:18 am by R1der Reason: 1
Das klingt ja schonmal gut.

Wie gebe ich den die Fuses direkt in dem Sketch mit?
Wo find ich die Bedeutung/Zuordnung der Fuses?

Habe z.B. noch zwei ATMEGA8-16PU lose rumfliegen und möchte diese in kleinster Bauweise verbauen (ohne externen Oszillator).
Für den 328 findet man mehr beispiele usw. jedoch hab ich zurzeit keine Möglichkeit mir eine Platine zu ätzen und experimentiere nun mit den alten, bis ich wieder ätzen kann :smiley-roll:


sth77


Wie gebe ich den die Fuses direkt in dem Sketch mit?

Das geht nicht. Du kannst aber die boards.txt für deine eigenen Boards/Platinen erweitern. Dort sind dann auch die entsprechenden Fuses einzutragen. Das Setzen der Fuses geht aber über die ISP-Programmierung (auch wenns namentlich doppelt gemoppelt ist ;)), nicht über die Programmierung per Bootloader!


Wo find ich die Bedeutung/Zuordnung der Fuses?

Im Datenblatt des verwendeten Mirocontrollers oder zusammenfassend im Internet: http://www.engbedded.com/fusecalc oder als Android-App: https://play.google.com/store/apps/details?id=com.misc.avrfuse
Mein verwaister Arduino-Blog: http://www.sth77.de/ - letzter Eintrag: Diamex-ISP in der irgendwann mal aktuellen Arduino-IDE 1.6.4

Go Up