• Hallo TT-Modellbahner, schön, dass du zu uns gefunden hast.
    Um alle Funktionen nutzen zu können, empfehlen wir dir, dich anzumelden. Denn vieles, was das Board zu bieten hat, ist ausschließlich angemeldeten Nutzern vorbehalten. Du benötigst nur eine gültige E-Mail-Adresse und schon kannst du dich registrieren.
    Deine Mailadresse wird für nichts Anderes verwendet als zur Kommunikation zwischen uns.
    Die Crew des TT-Boardes

PIC oder Atmel? Aller Anfang ist schwer...

Die ISP-Schnittstelle funktioniert bei allen IDE's für Atmel-Controller. (PonyProg, Bascom, myAVR, SiSy etc...)
Die extra genannten µC lassen sich auf diesem Board scheinbar auch parallel brennen wenn man sie in die Sockel steckt. Hat den Vorteil dass man den µC nicht wegschmeißen braucht wenn man -wie's mir mal passiert ist- bestimmte Fusebits setzt und damit die ISP-Schnittstelle abschaltet.
(keine Bange: im Normalfall kommt und geht man an diese Bits nicht ran)
 
Also ich realisiere dir mit 8 I/O-Ports und einen 74154 64 Eingänge!
Da hättest du beim ATtiny2313 immer noch 7 Ausgänge die man bei bedarf eventuell auch splitten könntest.
Der Trick: Port 1 Bit 0-3 werden als Ausgänge genutzt, und der Prozessor zählt alle x ms um eins höher. An diesen Ausgängen ist der Binär zu 1aus16- dekoder angeschlossen, der jeweils einen Ausgang je nach gezählter Zahl auf masse legt.
An die Ausgänge des Dekoders kommen dann je Emitter der Optokopler. Je ein Colektor jeder Ausgangsleitung kommt dann miteinander verbunden und zieht dann einen der 4 eingänge auf Low, wenn der entsprechende Dekoderausgang Low hat. Das ganze ist eine Zeitmultiplexabfrage mit Matrixanordnung der eingänge.
Vorteil: Du kanst wahlweise alle eingänge nacheinander abfragen, und danach ereignisse steuern, oder aber man kann auch gezielt einen bestimmten ausser der reihe abfragen!
Also zB. diese Schleife:
Schleife 1:
Ist Eingang Zeile 5 Spalte 2 gemeldet?
nein, Springe schleife 1
Ja, führe nächsten Steuerbefehl oder Abfrage aus


Ausserdem sind heute kaum noch TTL-Schaltkreise zu haben! Die meisen sind HC oder HCT, also C-Mos-IC die TTL-Pinkompatibel sind!
Damit gibt es auch nicht mehr die großen Ströme wie im Klasischen TTL-System.
Der Prozessor verträgt auch nur 5V, also sollte ringsum auch alles mit 5V sein! Daher die Eingänge über Optokopler (oder Relais) einspeisen. Ein 4N33 kostet ca. 0,20€.
Die Ausgänge würde ich auch entweder über solche Optokoppler trennen (der Transistor wird mit einem Stärkeren in einer Darlingtonschaltung verknüpft) oder über Relais mit 5V Steuerspannung, die über Diode und getrennten Stütz-C die Stromversorgung des Prozessors von den Störspitzen der Relais Entkoppelt.
Der Prozessorbaustein inklusive 74xx-Bausteine ist also Spannungsmäßig eine "5V-Insel", die keine galvanische Verbindung mit der Anlage hat, sondern alles über Optokoppler komuniziert. Damit sind der Großteil der Anlagenstörungen schon mal unterdrückt.
 
"An die Ausgänge des Dekoders kommen dann je Emitter der Optokopler"

?!? Verständnissproblem.
Was möchtest Du mit dem Ausgang am Emitter bewirken?
 
Das ist ein "Verdrahtungs-Und-Logik". Erst wenn der Ausgang Low hat UND der Optokoppler angesteuert ist, ist der dazugehörige Eingang auf Low gezogen!
Ist der Dekoderausgang High, so ist es egal, was am OK für ein Signal anliegt, und ist der OK nicht angesteuert, so ist das signal am Dekoderausgang egal.
Der OK ersetzt hier den Mechanischen Taster der Abfragematrix.
Und natürlich mussen die Eingänge über Pull-up-Widerstände (intern Programiert oder extern real vorhanden) gegen +Ub gezogen werden.
 
Gute Idee. Hab mich allerdings noch nicht weiter mit dem Aufbau einer Matrix beschäftigt.
Ein Decoderausgang ist in aller Regel immer hochohmig weil man hier der Einfachheit wegen Open-Collektor-Schaltungen aufbaut. Von daher müsste man entweder einen PullUp an der Anode des Optokopplers einbauen oder man verbindet die Kathode mit dem Ausgang des Funktionsdecoders. Letztere Variante bietet den Vorteil das die Schaltung weniger Strom verbraucht.
 
THX erstmal für die Infos.
Was mich ein bisschen wundert das sich außer Eurofima fast nur Atmel-Vertreter zu Wort gemeldet haben.

Also ich hab mich entschlossen erst mal kleine Brötchen zu backen und mich step-by-step ranzutasten. Also Schieberegister usw. bleiben vorerst außen vor. Parallel rein und wieder raus. Das Ganze auch losgelöst vom eigentlichen Ziel auf Experimentalbasis, ein paar "Knöppchen und Birnchen" und damit die Basis verstehen.

Jetzt noch ein paar Fragen. Ich stell die hier statt in einem µC Forum da erstens der Bezug (Moba) da ist, zweites solche Foren oft zu Theorie-lastig sind und aus 1+1=2 eine Differenzialgleichung gemacht wird... (so entsprechend war die Antwort eben).
Ich möchte einen µC verwenden welchen ich später auch für das eigentliche Ziel einsetzen kann, egal ob parallel oder serial in. Ich denke deshalb in Richtung 32 I/O. Was RAM usw. angeht fehlt mir die Erfahrung bzgl. Menge des Quellcodes. Sind wie gesagt alles rein logische Verknüpfungen und (eigentlich binäre) Vergleiche. Welcher PIC/Atmel wäre da ausreichend?
Programmierung entweder direkt in ASM oder in C. Kann ich compilierten C-Code in ASM wieder auslesen (oder macht das sogar die Software) um gewisse Dinge nach zu vollziehen?
Jeder hat mal klein angefangen, kennt also jemand einen guten Link "for german speakers"?
Betreffs Programmiergerät wäre ich auch für ein paar Praxistips dankbar. Muss nicht das einfachste sein, sollte auch für "höheres" reichen sonst baut man zwei Mal. Scheint ja auch nicht jeder programmer für jenden µC zu passen... grumpf.

Nun noch schnell elektronisch, sollte man ja wegen des Aufwands im Auge behalten...
Die Eingänge könnte ich halbieren indem ich nur eine Weichenstellung direkt auswerte und die Andere negiert setze. Allerdings habe ich festgestellt das die Rückmeldungen der Antriebe ein "Loch" haben.
Als OC werde ich weiterhin die PCx17 einsetzen. Auf eine Pegelwandlung ohne OC ist noch niemand eingegangen. Abgesehen davon das es keine galvnanische Trennung gibt sehe ich da eigentlich keine größeren Probleme da ja Alles absolut träge ist. Vielleicht teste ich mal, der Aufwand ist schließlich bedeutend geringer da auf die Logikbausteine beschränkt.

Fragen über Fragen, eine Konzentration der Unwissenheit...

flic
 
Wenn Du die Pegel ohne eine galvanische Trennung realisieren möchtest kannst Du Dich recht schnell auf den Austausch der µC einrichten. Jede Spannungsspitze würde mit an sicherheit grenzender Wahrscheinlichkeit den einen oder anderen Controllereingang nach und nach lahmlegen.
Optokoppler haben eine gewisse Trägheit die sich durchaus als Vorteil erweisen könnte.

Sowas:
http://rumil.de/hardware/avrisp.html
lässt sich für eine Cent nachbauen wenn man an seinem Rechner noch nen Parallelport hat und AVR's proggen will.
WICHTIG:
Unbedingt
den 74xx244 als Puffer zwischen die Experimentierschaltung und dem Rechner einbauen!
Verzichtet man darauf kann sich im Exremfall das ganze Mainboard des Rechners verabschieden.
Der 244 ist ein Leitungstreiber, entlastet die Druckerschnittstelle und dient nebenbei noch als Schmitt Trigger weil die meisten LPT-Ports heutzutage nicht ganz konforme 3,3V ausspucken.
Schließt man auf seinem Entwicklungsboard etwas falsch an geht der 244 kaputt - dafür bleibt der PC heile.
Die verlinkte Schaltung ist mit dem STK200 von Atmel kompatibel - braucht man nur in der IDE entsprechend einstellen und kann loslegen.
Wenn sich der µC nicht brennen lässt ist meistens eine zu lange ISP-Leitung oder eine fehlende HF-Entstörung der Versorgungsspannung dran schuld.
 
Wenn Du die Pegel ohne eine galvanische Trennung realisieren möchtest kannst Du Dich recht schnell auf den Austausch der µC einrichten. Jede Spannungsspitze würde mit an sicherheit grenzender Wahrscheinlichkeit den einen oder anderen Controllereingang nach und nach lahmlegen.


Das ist ja nun mal eine Aussage! :)
Von der Schnittstelle her wünschte ich mir zwar USB da ich als Urgestein noch mit parallelem Laser arbeite. Aber da hab ich in Bezug auf die Programmer nur "in line" gefunden. Kommt eben der Drucker ans Netz. Macht auch viel mehr her :D Irgendwo liegen noch Karten für P-Ports, aber die PCI sind voll!
Wäre das von Per angesprochene Board eine Alternative? Obwohl der Nachbau in deinem Link mehr als einfach ist.
Ich seh schon, läuft wohl auf AVR hinaus. Nur welcher?

flic
 
@Per

Das Problem ist das ""Hello World"-Seiten meist nur "Hello World" behandeln und den Rest in "rest in peace"! Um über Bildschirmausgaben hinaus zu kommen tut mehr Not als simply Simplify. Erläuterungen zur restlichen Syntax (meine Erfahrung mit z.B. Installshield in der Onlinehilfe) sind meist so kryptisch das Vorkenntnisse (im Fall Installschield in C) und arge Experiemtierfreude zwingend notwendig sind.
Ein Programmierer sollte nie das Handbuch schreiben! Nur meistens machen es genau Dieselben...

flic
 
@flicflac

ich habe vor ca 2Jahren mit den Atmel angefangen. Anfangs mit einem selbstgebauten Adapter am Parrallelport. Jetzt verwende ich den seriellen auf dieser Seite http://www.my-irshop.de/catalog/, dort gibt es auch einen für USB. Es gibt einige Tutorials im Netz einfach mal suchen. Ich würde dir empfelen mit einem einfachen Atiny anzufangen. Die ganze Familie ist ziemlich modular aufgebaut. Das heißt wenn du den Timer im Atiny verstanden hast kannst du auch den im Atmega. Ganz wichtig !!! lade dir die Datenblätter herunter. Die sind zwar in englisch, aber da ist alles sehr gut beschrieben. Beim programmieren fang mit Assembler an. Damit versteht man die Hardware am besten. Wenn du die Funktionen im µC verstanden hast kannst du immer noch auf C umsteigen. Unter WWW.mikrocontroller.net sind auch Themen über DCC drin und Tutorials in Assembler und C.
Für dein Problem hatte ich dir ja schon mal den Atmega 8515 empfolen. Der hat sogar 35 Ein/Ausgänge.
Doch jetzt genug der Theorie. Fang einfach an und frag nach wenn du etwas nicht verstehst. Wir sind bei dir.
 
hier mal eine Matrix mit Optokopplern (die IR Diode habe ich mal weggelassen). Die Emitterleitungen werden nacheinander auf Masse geschaltet und sind ansonsten hochohmig. Die Leitungen an den Widerständen dienen zum Einlesen der Information. Die Schaltung habe ich in ähnlicher Form an meinem Servodekoder im Einsatz.
 

Anhänge

  • Matrix.JPG
    Matrix.JPG
    74,1 KB · Aufrufe: 34
@flicflac:

Wehe Du schmeißt den Laserdrucker auf den Müll!
Es gibt nichts besseres als Hardwarebasierte Schnittstellen - laufen zuverlässig und machen deutlich weniger Probs als USB&co.


Was USB-Brenner angeht kann man zum einen passende Adapter kaufen.
Wie hier mitsamt IDE oder auch selber bauen wie hier zum Beispiel. Ich hab die Seite aber nur kurz überflogen.
Wenn Du Dich auf Atmel einschießen möchtest wäre das STK500 als Programmierboard keine schlechte Wahl. Das kostet bei Reichelt mittlerweile nur noch 75 Euro (vor zwei Jahren noch um die 120€) und wird an die RS232-Schnittstelle angeschlossen.
Vom Prinzip her sollten für Deine Anwendung 2 Kilobyte Flash mehr als ausreichend sein. Der Attiny2313 passt da genau rein.
Die größeren µC haben zwar noch einige andere Features - auf die kannst Du aber erstmal verzichten.
Warum S-Klasse fahren wenn man nur nen Smart braucht? ;)
 
@flicflac

Bei Brennern würde ich dir USB empfehlen.
In Deutschland sind die Atmel Controller verbreitet und haben dadurch eine größere Fangemeinde, im Ausland ist dies umgedreht.

Hier jetzt mal ein PIC lastiger Beitrag:
Ich habe mich für die PICs entschieden, da sie bei DCC Projekten sehr häufig eingesetzt werden. Für deinen Anwendungsfall aber unerheblich.
Aus der PIC Familie wäre der 16F877A mit 33 I/O Ports der richtige.
Brenner für Microchip PICs kann man hier nachbauen:
http://sprut.de/electronic/pic/brenner/index.htm
Der Brenner8 ist für USB und kann fast alle PICs brennen.

Diese Seite liefert auch sehr gute Informationen und Beispiele für den Anfang, bis auf USB, alles in Assembler:
http://sprut.de/electronic/pic/grund/grund.htm

Wegen der Fehlersuche:
Du kannst deine Programme in der Programmierumgebung MPLAB als Simulation laufen lassen, um zu sehen, ob alles so funktioniert, wie es sein soll. Sowas gibt es bei den AVRs bestimmt auch.
Als frei verfügbare Programmierumgebungen gibt es das MPLAB von Microchip (http://www.microchip.com), wo für die PIC16 Familie nur in ASM programmiert werden kann sowie JAL, eine PASCAL ähnliche Programmiersprache. Als Editoren gibt es JALcc und JALEdit (http://pic.flappie.nl/).


Gruß
Ronny
 
Ich hatte mir zum Experimentieren ein Board gebaut, wo eine Matrix 4x4 16 taster abfragte und die Multiplexleitungen gleichzeitig einen Transistor ansteuerten, der die +5V auf 4 7-Segmentanzeigen schaltet. Die Segmente A-G habe ich dann mit den 7 Ausgängen des 2. Ports verbunden. Prozessor waren AT90S1200 (Ausgelaufen, aber am leichtesten zu verstehen), AT90S2313 und der Aktuelle ATtiny2313 passen auch (sind Pinkompatibel). Aber für dich würde es sicher auch reichen, wenn du an 8 Ports je eine LED gegen +5V schaltest, und an weitere Ports Taster gegen Masse.
Wenn du das Datenblatt der AT90S1200 als PDF möchtest, dann schicke mir eine Mail. Dort sind noch viele Details ausführlicher beschrieben, wie bei späteren Prozessoren, da er wesentlich weniger kann, aber damit auch mehr platz in der Beschreibung war.
Reichen würde für deine Aufgabe wahrscheinlich schon der ATtiny2313. Da die Prozessoren aber bei Reichelt nicht sonderlich teuer ist (2-5€), sollte es kein Problem sein, verschiedene zu testen.
Was mir noch sinnvoll erscheint ist, immer einen 2. gleichen zu haben, um eventuelle "Zwischenstände" gespeichert zu lassen, und die Weiterentwicklung in einem anderen zu machen.
Lade dir auch das Atmel-AVR-Studio runter, und instaliere es. Da ist dann in der Hilfe auch noch viel zu den Assemblerbefehlen zu lesen, und du kannst erst mal "Trocken" üben, denn das AVR-Studio simuliert den Prozessor. Du siehst, welche Ports welche Werte haben, und auch welche Registwer und Flags wie gesetzt sind. Du kanst also das gesamte "prozessorinnenleben" beobachten, was sich bei welchen Befehl wie ändert. Das hat mir bei einigen Problemen schon sehr geholfen!
Wenn du dann das 1. Programm in der Simulation zu laufen hast, dann kanst du es in die Prozessoren schieben, und auf deinem Testbord testen. Wenn es Probleme gibt, das irgend etwas nicht so läuft, wie du es gerne hättest, dan schreibe hier, oder schicke eine Mail (am besten mit deinem Programm), dann kann man schnell sehen, was du übersehen hast, und warum es nicht das macht, was du gerne hättest!
Noch etwas:
Wenn du ein Programm schreibst, dann kanst du beim AVR-Studio mit folgenden Zeilen dir das leben erleichtern:
.def var1 = r21
definiert var1 als register 21. Im Programm schreibst du dann stats
ldi r21,0x2F ldi var1,0x2F (lade Register 21 mit 2f Hexadezimal)
Solange du nur 1-2 Werte hast, ist es nicht nötig, aber wenn du dann alle 32 register benutzt ist es einfacher var 1 für Variable 1 zu schreiben, stats sich immer zu merken, das man stats Variable 1 R21 schreiben muß, und die Zahlen sind schnell mal falsch getipt.
.equ wert1 = 0b01010011
Hiermit kannst du Werte, die du eventuell später noch mal geändert werden müssen oder sollen namen zu weisen.
es ist ja leichter in der Zeile .equ wert1 = 0x53 einmal den wert zu ändern, wie in 20 verteilten Programzeilen den wert.
im Program steht dann:
ldi var1,wert1 stats ldi r21,83 oder ldi r21,0x53.
und als 3., füge so viele komentare ein, wie nur möglich, denn in 14 Tagen weist du nicht mehr, warum du gerade den Befehl da hin geschrieben hast. komentare werden immer mit Semikolon begonnen.
Also zB so eine Warteschleife bis alle eingänge des Ports Low sind:
Schleife1:
cpi var1, 0 ; ist Variable 1 = 0?
breq UP1 ; ja, Springe ins Unterprogramm 1
in var1,0x18 ; Einlesen der Daten aus Portadresse 0x18 in var1
rjmp Schleife1 ; abfrage wiederholen
Das Semikolen trennt die Komentare von den Befehlen, schleife1 ist eine Sprungadresse und wird mit einem doppelpunkt abgeschlossen wenn sie als Einsprungpunkt steht, wenn sie als ziel im Programm steht wird sie ohne Doppelpunkt geschrieben.
 
Atmel

Kauf' Dir das Eval-Board von Pollin wie PER schon vorgeschlagen hat.
Einen einfacheren und gleichzeitig günstigen Einstieg wirst Du nicht finden.

Wenn Du C kannst dann verschwende keine Zeit mit Assembler und lade Dir WINAVR runter. Ein sehr guter und gepflegter GCC-Compiler:
http://sourceforge.net/project/showfiles.php?group_id=68108

Gute Unterstützung dazu findest Du unter:
http://www.mikrocontroller.net/articles/WinAVR

Das STK500-Board kann ich nicht empfehlen. Wenn Du gleich eigene Schaltungen aufbaust, dann kauf Dir den AVR ISP von Atmel, ein USB-Programmer. Gibt es bei Reichelt für ca. 40Euro.
 
THX all

Uff, das war ja schon fast 'ne Programmieranleitung.

Erst der Frust, dann die Lust:
Hab mich heute in den Keller bewegt und nach den alten ASM-Unterlagen gesucht, wenn auch für x86 Struktur. So ein paar Bsp. mit eigenen Anmerkungen helfen manchmal über kleine Blockaden hinweg. Aber der Karton mit den alten Ordnern hatte wohl mal ein intensives Fußbad innerhalb der letzten 13 Jahre >> Tonne!

So, werd mich wohl mit Beiden mal beschäftigen. Anfangen erst mal mit AVR da mir das Beschreiben der PIC noch zu undurchsichtig ist. Das für den und den, das für das Andere, aber für Diesen... Dafür spricht mich die Seite von sprut etwas besser an als die AVR-Seite. Zudem Xemax mit "...da sie bei DCC Projekten sehr häufig eingesetzt werden" auch nicht Unrecht hat :)

Für AVR hab ich jedoch außer dem Controller selber fast alles da. Schließlich muss ich ja auch meinen neusten "Fimmel" irgendwie absegnen.

Das mit dem USB lasse ich erstmal, die einfache Parallel-Lösung mit ISP tut es auch vorerst (siehe Bild1).
Ich fang mal mit dem ATtiny2313 an um zu üben. Ein kleines Bastelboard auf Lochraster ala Bild2 und ein paar Leuchdioden für die Ausgänge sowie Jumper (oder Mäuseklavier) als Schalterersatz für die Eingänge sollten für den Anfang reichen. Wobei die extrene Taktung in Bild 2 wohl wegfallen kann.
Allerdings werde ich mir gleich noch einen AtMega 16 mitbestellen wegen der I/O. Bei EUR 2,70 ist das noch vertretbar. Wenn ich das bis jetzt so richtig verstanden hab ist die Programmierbelegung ATtiny2313 und ATMega16 wie folgt:

ATtiny2313:
Reset Pin1 PA2
MOSI Pin17 PB5
MISO Pin18 PB6
SCK Pin19 PB7

ATMega16:
Reset Pin9
MOSI Pin6 PB5
MISO Pin7 PB6
SCK Pin8 PB7

Das kann man ja auf die Sockel entsprechend verdrahten, ebenso die E/A. Schlagt mich wenn falsch!

Weiterhin hab ich nochmal etwas genauer kalkuliert: Ich brauche 20 Eingänge und 8-10 Ausgänge. Irgendwie soll sich der Aufwand auch niederschlagen. Da sich OC wohl nicht vermeiden lassen kann Alles auch parallel bleiben.

Das Board von Pollin reizt mich ja auch, allein schon weil fast alle AVR beschrieben werden können. Aber 2 Tasten, 3 Led und mal Piepen ... ? OK, der 40er Sockel ist eigentlich perfekt..., nochmal drüber Schlafen.
Wenn ich morgen bestelle hab ich die Sachen bis Freitag von Reichelt hier. Und es droht ein ödes WE welches nach Beschäftigung ruft. Weiß nicht wie schnell Pollin bei Erstbestellungen ist.

So, nun mal Bestellliste machen.

@E-Fan
Bin doch nicht des Teufels...!
Den Laser hab ich mir erst kürzlich organisiert da mein alter Laser nach 13 Jahren nun doch moralisch (300dpi, 512KB RAM) verschlissen war. Mit neuem Toner hätte er es wohl weiter getan.

flic
 

Anhänge

  • avrispsc.JPG
    avrispsc.JPG
    39,8 KB · Aufrufe: 32
  • Avr-schaltplan-1.JPG
    Avr-schaltplan-1.JPG
    15 KB · Aufrufe: 30
@flicflac

wenn du dir das Studio von Atmel runter lädst kannst du erst mal Trockenübungen machen. Das sieht dann so aus wie auf dem Bild. Noch ein Tip, dokumentiere deine Programme mit möglichst vielen Kommentaren (im Bild grün dargestellt). Das erleichtert eine spätere Weiterverwendung von Programmteilen.
 

Anhänge

  • Studio.JPG
    Studio.JPG
    90,4 KB · Aufrufe: 34
So, hatte mich gerade noch mit PIC und MPLAB beschäftigt...


@Gordon

Ein bisschen Programmiererfahrung hab ich schon. Egal wieviel man kommentiert, der erklärende und entscheidende Kommentar fehlt! :D

Nach reiflicher Überlegung (und drei Pils später) habe ich mich doch durchgerungen mir morgen (heute) das Board von Pollin zu bestellen. Allein schon die Platine und die dadurch vermeidbaren Beschaltungsfehler (Nutzung von ATtiny und später ATmega) sind die EUR 15,- wert. Den Testaufbau werd ich über den Pfostenstecker auf eine externe Lochraster machen.
Die ISP ermöglicht auch parallele Programmierung (siehe E-Fan). Das Teil baue ich mir auf jeden Fall auch.

flic
 
Du darfst nicht den Anschluss eines Programmieradapters am Parallelport des Computers mit paralleler Programmierung des Atmel verwechseln, das sind völlig verschiedene Dinge. Zum Verständnis die ISP (In System Programmierung) führt den sogenannten SPI Bus nach außen. Es handelt sich von seiten des µC um eine serielle Programmierung auch wenn der Adapter am Parallelport angeschlossen wird. Die parallel Programmierung der Atmel, manchmal auch als Hochvoltprogrammierung bezeichnet, ist ein anderer Programmiermodus bei dem die Daten 8 Bit breit anliegen und der Resetpin auf 12V angehoben werden muss. Dann braucht der auch noch einige Steuersignale und einen externen Takt. Mit dieser Programmiermethode kannst du Atmels wiederbeleben bei denen falsche Fusebits gesetzt wurden oder wenn du dir den Resetpin weggefust hast. So eine Schnittstelle ist auf dem STK500 drauf. Ich habe bisher so etwas noch nicht gebraucht. Wichtig ist nur bei Programmierung der Fusebits lieber dreimal nachzusehen und nur die Fusebits verändern über deren Funktion du dir 100% im klaren bist. Wenn du damit Probleme hast kannst du ja erst mal hier nachfragen.
 
Die externe Taktung nach Beitrag 43 Bild 2 ist meiner meinung nach verschwendung. Ein einfacher Quarz zwischen XTAL 1 und 2 und je ein 27pF Kondensator von beiden Anschlüssen gegen Masse reicht!

Ich habe an meinen Schaltungen eine 6-poliges kabel an die entsprechenden Stellen auf der LS-Seite gelötet (oder eine gleich eine Buchse), an das dann zum Programieren der Adapter gesteckt wird. Wenn dann alles fertig ist, kommt das kabel ab.

Der Prozessor sitzt bei mir immer in einer IC-Fassung. Im Moment habe ich mit bei E-Bay eine Textoolfasung bestellt, mit der ich dann alle DIL-Gehäuse einstecken kann. Damit will ich mir dann ein Universal-test- und Programmiersystem aufbaun.

Übrigens sind die x86-asm-Programierkendnisse zu 90% auch für Atmel nutzbar! Nur hast du hier stats der register A-D die register R0-R31 die alle weitgehend frei nutzbar sind, so wim im x86 die register A-D. Einzige einschränkung: R0-R15 lassen sich nicht direkt beschreiben oder vergleichen (ldi/cpi r0,0x65 klappt nicht, da mußt du
ldi r2x, 0x65
cp r0,r2x
schreiben, wobei r2x r16-r32 sein kann).
Aber da gibt das AVR-Studio dann eine entsprechende Fehlermeldung beim übersetzen aus.
Auch die Interutvektorenliste ist ähnlich zu handhaben wie im x86.
Der 1. Interupt weist auf den Programmstartpunkt und alle anderen auf die unterprogramme, die zB der Timer oder der externe Interupt auslösen sollen.
zB:

jmp Start
jmp Intext1
jmp intext2
jmp timerüberlauf

start:
;Programmbereich
;...
rjmp start
;beginn Interuptroutinen
intext1:
reti
Intext2:
reti
timerüberlauf:
reti

wobei ich immer die komplette Interuptliste am anfang aus dem Datenblatt des Prozessors kopiere, damit ich nicht hinterher irgendwelche Probleme bekomme.
Ausserdem darfst du nicht vergessen, den Stackepointer auf das RAM-ende zu setzen, da sonst jeder rücksprungbefehl im neustart landet.
Und beim ATMega16 ist der JTD-Port im urzustand aktiviert, wenn du diese Ein-/Ausgänge normal nutzen willst mußt du diesen JTD gleich erst mal abschalten.

Hier mal das, was bei mir immer beim ATMega 16 nach den .def und .equ-zeilen steht:
.def r15 = akku

jmp RESET ; Reset Handler
jmp EXT_INT0 ; IRQ0 Handler
jmp EXT_INT1 ; IRQ1 Handler
jmp TIM2_COMP ; Timer2 Compare Handler
jmp TIM2_OVF ; Timer2 Overflow Handler
jmp TIM1_CAPT ; Timer1 Capture Handler
jmp TIM1_COMPA ; Timer1 CompareA Handler
jmp TIM1_COMPB ; Timer1 CompareB Handler
jmp TIM1_OVF ; Timer1 Overflow Handler
jmp TIM0_OVF ; Timer0 Overflow Handler
jmp SPI_STC ; SPI Transfer Complete Handler
jmp USART_RXC ; USART RX Complete Handler
jmp USART_UDRE ; UDR Empty Handler
jmp USART_TXC ; USART TX Complete Handler
jmp ADC ; ADC Conversion Complete Handler
jmp EE_RDY ; EEPROM Ready Handler
jmp ANA_COMP ; Analog Comparator Handler
jmp TWSI ; Two-wire Serial Interface Handler
jmp EXT_INT2 ; IRQ2 Handler
jmp TIM0_COMP ; Timer0 Compare Handler
jmp SPM_RDY ; Store Program Memory Ready Handler
;
RESET: ldi r16,0x04 ;high(RAMEND) ; Main program start
out 0x3e,r16 ;Set Stack Pointer high adr to top of RAM
ldi r16,0x5F ;low(RAMEND)
out 0x3d,r16 ;Set Stack Pointer low adr to top of RAM
ldi akku,0x80
out 0x34,akku ;JTD-Port deaktiviert
 
@Gordon

Ich meinte mit paralleler Programmierung eigentlich das Programmieren über LPT mit diesem Adapter den E-Fan in Thread32 nannte. Davon kann man ja dann auch auf die ISP des Testboards gehen und nicht die integrierte COM des Testboards verwenden.
Aber E-Fan erwähnte in Thread 26 auch die Sache mit den Fuse-Bits im Zusammenhang mit parallelem Brennen.
Ich hätte mich da wohl etwas präziser ausdrücken sollen anstatt nur auf E-Fan zu verweisen.
Als Insider denkt man auch wohl gleich zu kompliziert ;)

Beispiel:
Durchlaufstraße zur Holzbearbeitung. Da die etwas lang ist sind in gewissen Abständen und an kritischen Positionen Notaus-Schalter angebracht. Alle solche Sicherheitskontakte sind elektrisch (logisch) verknüpft und wir nennen das Notaus-Kette. Ist aber rein elektrisch (logisch). Dann rief ein Bediener an und sagte die Notauskette sei gerissen. Hä, was nicht mechanisches reißen??? Jedenfalls ist dann ein Techniker hin (war gleich um die Ecke) und fiel vor Lachen fast um. Die Notaus-Schalter waren über dem Laufgang hoch angebracht und um sie im Notfall betätigen zu können hatte man Ketten nach unten gehängt...


@pltbahn
Du qualifizierst dich gerade zum primären Ansprechpartner ... :)
Ich versuch mich erstmal mit dem ATtiny. den ATmega16 bestell ich nur wegen der Versandkosten mit.


So, jetzt mal bei Pollin anrufen wie das mit dem Erstliefern ist.

flic
 
Ich hab mir auch das Evaluierungsboard bestellt, um dann hoffentlich bald mal mitreden zu können. Mann, waren das noch Zeiten, den JU+TE-Computer in Assembler zu programmieren und neckische Add-Ons zu basteln!
 
Zurück
Oben