Hallo,
ich versuche mit einem Attiny26 ein 82S129 PROM zu emulieren. Wenn ich
LEDs am PROM anschließe und am attiny funktionieren beide völlig
identisch, doch an das Gerät angeschlossen geht es nicht (ein TDD1742T
PLL-Generator liest das PROM aus). Ich habe nun schon alles in Assembler
programmiert (ich hab vorher nie avr-assembler (nur SSE etc. auf x86)
programmiert, der code ist daher vielleicht nicht ganz optimal, sieht
aber meines Empfindes immer noch sehr viel besser aus als das was
avr-gcc aus meinem C-Code gemacht hat), start-up fuses auf 0 gesetzt und
auf 16MHz Takt, doch ich weiß nicht woran es liegt, an sich dürfte der
AVR jetzt nicht langsamer sein als das PROM. Ich habe leider kein
Oszilloskop zur Verfügung, daher kann ich nicht messen was passiert.
Zuerst hab ich die daten aus dem EEPROM gelesen, doch das EEPROM geht
nicht zuverlässig mit SUP-Fuses auf 00. Bevor ich das mit Interrupt
hatte, hab ich auch schon ein loop ausprobiert, genau das gleiche.
Irgendeine Idee wo das Problem liegt? Der PLL-Generator wird übrigens
mit 6MHz getaktet, die Frequenz wird intern nochmal mindestens durch 48
geteilt (wenn ich das TDD Datenblatt korrekt interpretiere), heißt mit
mehr als 125kHz kann das PROM nicht ausgelesen werden, da sollte der
Attiny doch deutlich schneller sein. Gibt es vielleicht irgendwelche
elektrischen Inkompatibilitäten weshalb der Attiny nicht am TDD1742T
will?
Vielen Dank
Stefan
moin moin,
so wat das nix!
Der PROM hat eine Zugriffszeit von ca. 50ns, wofür wird er genutzt.
Spielt diese Zeit eine Rolle?
ICH würde das per Tabelle umsetzen.
Da ich 8051-Fan bin mit einem 89LP2051 und so:
ORG 0
Mov DPTR, #T ;Pointer auf Tabellenanfang
L: Mov A,P1 ;Adr. lesen
MovC A, @A+DPTR ;A = TAB[A]
Mov P3, A ;Wert ausgeben
AJMP L ;loop
ORG 100H
T: ;hier stehen die 256 Bytes der Tabelle
Die Schleife braucht 10 Takte, bei 20MHz läge die "Zugriffszeit" bei
500ns.
In C könnte das so gehen:
While { P3 = TAB[P1] };
Mit Gruß
Pieter
Alternativ könnte man statt des nicht mehr erhältlichen und umständlich
zu programmierenden PROMs ein EPROM benutzen - falls denn genug Platz
dafür vorhanden ist.
Das ganz kurze geht nicht, da noch am Anfang zusätzliche 4 Bits
ausgelesen werden sollen (ist in meiner Testschaltung noch nicht
vorhanden, daher auskommentiert). Den Loop hab ich jetzt auf 7
Taktzyklen runter. Es klappt jetzt schon etwas besser: Er liest
zumindest irgendwas, in ca. 50% der Fälle bekomme ich ein PLL-Lock,
Frequenz passt aber nicht. Vermutlich bekommt er nicht alle Bits
korrekt.
Irgendwelche Ideen wie ich den Loop noch kürzer machen kann oder die
Geschwindigkeit sonst erhöhen?
An ein Parallel-EEPROM habe ich schon gedacht, nur leider gibt es keine
kleinen mehr. 4 Bit Ausgang und 7 Bit Adressleitung bräuchte ich. Das
kleinste was ich gefunden hab ist 13 Bit Adresse und 8 Bit Ausgang. Das
hat dann aber so viel Pins das ich es nicht einfach als SMD auf eine
Platine tun kann die dann nicht größer ist als das 16-Pin PDIP PROM.
Irgendwelche Ideen?
Vielen Dank,
Stefan
Nur mal so 'ne ganz blöde Frage: Du schreibst deine Daten an RAM-Adresse
0x00 bis 0x07? Das geht leider nicht, denn der RAM beginnt erst bei
0x60. ;)
Gruß
Jonathan
P.S.: Man merkt, dass Du aus der x86-Richtung kommst, denn Du benutzt
anstatt "CLR rX" "EOR rX, rX" :D (welche auf AVRs übrigens gleichschnell
sind ;) )
Stefan schrieb:> Irgendwelche Ideen?
Hallo Stefan,
ich habe in einer Z80-Schaltung so ein bipolares PROM als
Bootstrap-Programmspeicher verwendet, der ebenfalls schon lange nicht
mehr lieferbar ist (512 x 8 im DIL20), dafür habe ich mir einen Adapter
gemacht von PLCC32 auf DIL20 und setze Flashspeicher 128k x 8 ein - ist
brutalstmöglicher Overkill, funktioniert aber einwandfrei. Was solls
dass der Speicher viel zu gross ist, er kostet ja weniger als die PROMs
je gekostet haben und reprogrammierbar ist er auch noch. Foto anbei.
Gruss Reinhard
RAM erst ab 0x60, habe gerade gegooglet was bei 0 bis 7 ist, es sind die
Register 0 bis 7, sollte aber doch kein Problem sein solange ich die
Register nicht anders verwende (was ich im Moment allerdings tue)? Bei
den I/O-Ports geht es angeblich laut diesem Forum (brauch halt bloß 2
Takte statt einen bei in/out-Befehlen).
Sehe im Moment bloß leider keine Möglichkeit wie ich das für zusätzliche
Geschwindigkeit nutzen kann, kann die Register ja nicht direkt
adressieren im loop.
Habe den code jetzt so umgeschreiben und mit LEDs geprüft, geht
problemlos:
Macht den loop bloß nicht schneller.
Hab nachgeschaut: clr rX ist genau das gleiche eor rX, rX, das ist nur
eine kurze Schreibweise, wird aber genau gleich übersetzt.
Gruß
Stefan
Hallo Reinhard,
das mit dem Adapter ist eine gute Idee, Problem ist nur der Sockel ist
laut Datenblatt 18,75mm breit, das ist zu groß.
An sich unglaublich das man ein 30 Jahre altes IC heute nicht einfach
ersetzen kann wegen a) zu langsam oder b) zu groß...
Gruß
Stefan
Es funktioniert (meistens)!
Hab ohne große Hoffnung nochmal den AVR mit der letzten Codeversion (es
ist noch der gleiche Attiny26, hab Attiny261 in die include geschrieben
weil der assembler ldi mit register für den Attiny26 nicht kennt) an den
PLL angeschlossen und siehe da, es geht (in 90% der Fälle). Entweder es
lag an dem einen fehlerhaften Byte (was ich nicht glaube, dann wäre es
nicht so zufällig) oder daran das ich beim Start jetzt 16 Takte
einspare. Wenn ich ein Attiny261 nehme der ldi mit Z+ kann spar ich
nochmal 7 Takte, vermutlich gehts dann noch besser.
Ursprünglich wollte ich ein Attiny24 nehmen, weil der kleiner ist,
dummerweise hat der kein PLL und läuft nur auf 8 MHz, oder kann ich den
ohne externen Takt auch irgendwie auf 16 MHz takten?
Hab gerade in das Datenblatt des Attiny261 geschaut: aaarghhh! Der kann
nicht sofort starten wie der Attiny26 sondern hat selbst bei Start-Up
Fuses auf 00 noch 4ms + 1038 Takte bei PLL. Was soll das denn?
Scheint wohl darauf hinauszulaufen das der einzige geeignete
Mikrocontroller der Attiny26 ist, den ich zufällig rumliegen hatte oder
kennt jemand einen besser geeigneten?
Gruß
Stefan
Hi
>Ursprünglich wollte ich ein Attiny24 nehmen, weil der kleiner ist,>dummerweise hat der kein PLL und läuft nur auf 8 MHz, oder kann ich den>ohne externen Takt auch irgendwie auf 16 MHz takten?
Kannst du auch nicht mit dem internen Takt. Die PLL der ATTiny26/261
wirkt nur auf Timer1. Beide Controller laufen intern mit max. 8MHz.
>Wenn ich ein Attiny261 nehme der ldi mit Z+ kann spar ich>nochmal 7 Takte, vermutlich gehts dann noch besser.
Was soll 'ldi mit Z+' sein?
MfG Spess
Stefan schrieb:> Problem ist nur der Sockel ist> laut Datenblatt 18,75mm breit, das ist zu groß.
Es gibt inzwischen auch Flash memory im 8mm breiten Gehäuse (TSOP32).
Ist aufwendig zu adaptieren (Multilayer), aber möglich wärs.
Gruss Reinhard
Hallo,
eine Frage ist bisher völlig unter den Tisch gefallen: warum kaufst du
nicht einfach 82S129, solange es noch welche gibt?
Das ist vielleicht keine langfristige Lösung, aber langfristig sind wir
bekanntlich alle tot.
Gruss Reinhard
Hi,
Reinhard Kern schrieb:> Hallo,> eine Frage ist bisher völlig unter den Tisch gefallen: warum kaufst du> nicht einfach 82S129, solange es noch welche gibt?
Das ist eine gute Frage, wobei ich allerdings aus eigener Erfahrung
durchaus einige Fälle kenne wo das gerade keine Alternative ist.
Beispielsweise fällt mir da ein Projekt ein wo wir Betriebsfunkgeräte
der Serie Teletron T8000 die als 16Kanalgeräte deren "Programmierung"
durch 2 Proms des Typ 82S23 auf dem MArkt gekommen sind mit hilfe von
anderen Speicherbausteinen in Vielkanalgeräte mit einigen hundert
einstellbaren KAnälen ausgestattet haben. (Sowohl der Umbau in eine
Amateurfunkversion wo dann ehemalige 5Toneinstellung zur
Frequenzdirekteingabe wurde als auch in einer (illegalen) BOS Version wo
dann alle Kanäle in allen vier Bandlagen einstellbar waren)
Selbst wenn jemand dieses nur als Wenigkanalgerät -z.B. OV Telefon-
weiterbetreiben will mag so ein Austausch Sinn machen, denn man muss ja
auch erst einmal die Leerproms bekommen UND Programmieren können.
Etwas ähnliches haben wir (einige AFU & gleichzeitige BOSler) mit
Ausgesonderten FuG8b von Bosch (Bauserie KF802) gemacht deren
Kanalspeicher noch mit hilfe von PROMs realisiert war und nicht wie bei
den Nachfolgern, bsp- SEL FuG8b1/Später Bosch FuG8b1z, durch direkte
Einwirkung auf die TEiler in der FAB- um den Frequenzbereich ein paar
MHz zu verschieben da in Absprache mit der der damals noch RegTP eine
kurzzeitige Sonderzuteilung für uns geplant war. ISt dann aber aufgrund
von Problemen auf unserer Seite eingeschlafen, von den Sachbearbeitern
der Behörde hatten wir schon grünes Licht signalisiert bekommen...
(Diese Geräte verwenden im übrigen genau wie die T8000 und die erste
Version der BOSCH KF3 Serie den Siemens S187 als PLL Baustein)
Das sind dann schon gute Gründe das anders zu machen.
GEht es aber nur um eine statische Anwendung wo der Speicherplatz im
Original ausreicht und das soll nicht verändert werden würde ich mich
der Frage anschließen.
Zudem schließe ich mich gleich mal mit der Frage an ob es denn eine neue
Schaltung sein soll oder es aber um die Umrüstung einer bestehenden
Schaltung geht.
Wenn es um die Umrüstung bestehender Schaltungen geht - wie mein
Funkgerätebeispiel oben- Klar dann sind große Teile vorgegeben und man
muss versuchen so wenig Aufwand mit möglich zu haben, alles was man
rausschmeisst muss zudem noch an den Platz des Bauteils passen UND das
ganze sollte auch Mechanisch stabil sein.
Geht es aber um NEUE Aufbauten frage ich mich warum denn ausgerechnet
diese Alte PLL zur Anwendung kommen soll?
Entweder man möchte wirklich noch etwas über die PLL Technik lernen,
dann sind aber noch ältere Konzepte eher Besser geeignet - wie wenn es
einigermaßen Luxuriös sein soll der S187 den man aber PArallel via Dip
Programmieren kann - oder für ganz heisse Dinge noch richtig zu Fuss mit
4046 und Programmierbarer Teiler usw. in der Peripherie.
Ein wirklich "professionelles" Gerät was nach dieser Methode seine
Frequenzen Erzeugt wurde besipielsweise von den späten 70ern bis in die
zweite hälfte der 90er Jahre erfolgreich gebaut und wennman von den
altersschwachen Kondensatoren absieht die man durchaus alle mal tauschen
sollte wenn man das Ding eh schon aufhat sind die "alten" Geräte mit
30Jahren auf dem Buckel heute im Schnitt Zuverlässiger als die nach
96gebaute -optisch identischen- NAchfolger wenn die erst einmal 5 JAhre
hinter sich haben. Und man lernt richtig was wenn man die Technik
analysiert. (Bosch FuG8b1z fü 75-87Mhz und FuG9c für 168-174Mhz)
Soll es später nur Funktionieren würde ich etwas moderneres Nehmen, da
gibt es heute doch eine Reihe Bausteine die dann direkt vom µC mit I2C
oder SPI programmiert werden können. Teilweise sogar derart hoch
integriert das nur 4-5 externe Bauteile nötig sind und man hat VCO+PLL
in einem Baustein, teilweise sogar drei komplette Blöcke gleichzeitig
mit denen man dann mal den Frequenzbereich von 0- >1GHz überstreicht!
(Ok, dann legt man auch mal 9Euro/IC hin)
Aber BTT, eines fällt mir noch ein:
>> Das ist vielleicht keine langfristige Lösung, aber langfristig sind wir> bekanntlich alle tot.>> Gruss ReinhardStefan schrieb:> Hab gerade in das Datenblatt des Attiny261 geschaut: aaarghhh! Der kann> nicht sofort starten wie der Attiny26 sondern hat selbst bei Start-Up> Fuses auf 00 noch 4ms + 1038 Takte bei PLL. Was soll das denn?> Scheint wohl darauf hinauszulaufen das der einzige geeignete> Mikrocontroller der Attiny26 ist, den ich zufällig rumliegen hatte oder> kennt jemand einen besser geeigneten?
Wenn es nur ums Start-Up geht:
Dein PLL hat doch einen Reset Eingang. Warum lässt du nicht erst mal
deinen µC in ruhe hochlaufen (Ok, der Synth. liest in der Zeit nur Mist,
kann dir egal sein) - Und DANN nachdem der µC ins Hauptprogramm springt
löst du einen Reset am PLL aus! Dadurch lädt dieser dann dank
betriebsbereiten µC die richtigen Daten.
Ansonsten bleibt halt nur der Rückgriff auf schnellere µC...
Man könnte für den konkreten Programmcode mal schauen ob das auf einem
gängigen 8Bitter irgendwie schneller läuft, also ob man einen
Geschwindigkeitsvorteil hat wenn man bsp. einen PIC18F25K20 verwendet
der mit 64Mhz intern laufen kann was zwar auch einem Befehlstakt von
16Mhz entspricht, aber dieser hat durch die Taktviertelung deultich mehr
Befehle die in einem Befehlstaktzyklus abgearbeitet sind.
Große Sprünge bekommt so auch nicht hin.
Alternativ bleibt noch der Blick in die 16 oder gar 32Bit Welt wo es
auch viele kleine µC gibt die >>60Mhz echtem Befehlstakt haben und die
auch nicht wirklich teurer sind als ein normaler AVR oder 8Bit Pic.
(Pic24, kleine PIC32, CortexM0 usw. usf. alles ab ca. 2 Euro, geht je
nach interer Ausstattung aber auch weit darüber hinaus)
Gruß
Carsten
Reinhard Kern schrieb:> eine Frage ist bisher völlig unter den Tisch gefallen: warum kaufst du> nicht einfach 82S129, solange es noch welche gibt?
Gibt es die wirklich?
Ich hatte auch das Problem und der Händler hat mir dann einfach nur
einen ähnlichen Ersatz geschickt.
Nicht immer, wenn der Original-Typ angeboten wird, kriegt man ihn auch.
Den Original-Typ konnte ich mit meinem alten Programmer auslesen, der
Ersatz war jedoch nicht in der Liste. Und moderne Programmer können
solche Uralt-Typen auch nicht mehr.
Ich hab dann einfach einen GAL genommen und die Daten als Truth-Table
programmiert. Geht gut. Der GAL steht nur etwas über.
Peter
Peter Dannegger schrieb:> Ich hab dann einfach einen GAL genommen und die Daten als Truth-Table> programmiert. Geht gut. Der GAL steht nur etwas über.
Hallo Peter,
leider haben die GALs inzwischen das gleiche Beschaffungsproblem. Da
gibts noch viel mehr zu ändern als mit den paar bipolaren PROMs.
Beim 82S129 habe ich kurz gegoogelt ("82s129 preis") und hätte mir einen
für 5 Euro in den Warenkorb laden können, ich verlinke hier mal:
http://www.arcadiabay.de/source/item.aspx?id=3206
Ich könnte wahrscheinlich alle aufgeführten Typen programmieren.
Vielleicht sogar gegen Bezahlung als Service.
Gruss Reinhard
PS ich müsste mal im Keller nachsehen, da war mal eine Stange bipolare
Proms 256x4. Wenn ich sie nicht weggeworfen habe wegen mangelnder
ökonomischer Verwertbarkeit. Abgeschrieben nach AFA sind sie seit 25
Jahren.
Reinhard Kern schrieb:> leider haben die GALs inzwischen das gleiche Beschaffungsproblem.
Ne, die sind noch voll in Produktion und z.B. bei Farnell Lagerware.
Aber nicht mehr von Lattice, sondern von Atmel und heißen daher ATF16V8,
ATF20V8 bzw. ATF22V10.
Peter
Peter Dannegger schrieb:> Aber nicht mehr von Lattice, sondern von Atmel und heißen daher ATF16V8,> ATF20V8 bzw. ATF22V10.
Danke für den Hinweis. Die habe ich bisher nicht gefunden, weil Farnell
eine völlig bescheuerte Einteilung und Suchfunktion hat, unter der
Gruppe PALs/GALs sind sie nämlich NICHT aufgeführt, die haben für Atmel
eine neue Gruppe definiert.
Ich sehe auch noch Marktbedarf, es gibt noch viele Anwendungen mit GALs.
Gruss Reinhard
Hallo,
> Was soll 'ldi mit Z+' sein?
Gemeint war natürlich lpm mit Z+, kann der Attiny26 nur in den ersten
256 Byte.
> Kannst du auch nicht mit dem internen Takt. Die PLL der ATTiny26/261> wirkt nur auf Timer1. Beide Controller laufen intern mit max. 8MHz.
Den internen Takt kann man doch kalibrieren? Der PLL wird damit auch
getaktet laut Datenblatt des Attiny261 und da wird gewarnt den Takt groß
zu verändern wenn der PLL verwendet wird (sonst kein PLL-Lock mehr). Das
Datenblatt des Attiny26 schweigt sich dazu aus, das Diagramm mit der
Taktverteilung ist aber das gleiche. Man kann bei beiden Controllern den
PLL als Taktquelle über die Fuses einstellen.
> Es gibt inzwischen auch Flash memory im 8mm breiten Gehäuse (TSOP32).> Ist aufwendig zu adaptieren (Multilayer), aber möglich wärs.
Dual Layer kann ich selber machen, alles darüber hinaus müsste ich
machen lassen und das wird teuer. Für 12 Stück lohnt sich das nicht.
> eine Frage ist bisher völlig unter den Tisch gefallen: warum kaufst du> nicht einfach 82S129, solange es noch welche gibt?
a) Ich hab kein Programmiergerät dafür und auch kein Schaltplan etc.
dafür im Inet gefunden (aber auch nicht intensiv gesucht)
b) kann ich nicht neu programmieren. Damit wäre ich auf die Frequenzen
festgelegt. Ich hab zwar nicht die Absicht immer den Controller
auszubauen und neu zu programmieren, aber ich möchte nicht in einem Jahr
wieder vor dem gleichen Problem stehen, weil ich aus irgendeinem Grund
die Frequenzen ändern muss.
> Zudem schließe ich mich gleich mal mit der Frage an ob es denn eine neue> Schaltung sein soll oder es aber um die Umrüstung einer bestehenden> Schaltung geht.
Es geht um die Umrüstung einer bestehenden Schaltung, sonst würde ich
einfach das Layout ändern das auch ein großes EEPROM Platz hat (oder
einen anderen PLL nehmen).
Es ist leider sehr kompakt aufgebaut, das heißt es darf zu keiner Seite
groß überstehen.
> Wenn es nur ums Start-Up geht:> Dein PLL hat doch einen Reset Eingang. Warum lässt du nicht erst mal> deinen µC in ruhe hochlaufen (Ok, der Synth. liest in der Zeit nur Mist,> kann dir egal sein) - Und DANN nachdem der µC ins Hauptprogramm springt> löst du einen Reset am PLL aus! Dadurch lädt dieser dann dank> betriebsbereiten µC die richtigen Daten.
Die geniale Schaltung versorgt das PROM nur mit Strom wenn es gelesen
wird. Der PLL hat einen Ausgang mit dem er einen Transistor ansteuert
über den das PROM versorgt wird. Wenn der PLL findet er hat genug
gewartet fängt er an auszulesen, über die Länge dieser Wartezeit ("PROM
Settling Time") hab ich im Datenblatt des TDD1742T leider nichts
gefunden. Das Reset am PLL wird durch den Frequnzwahlschalter ausgelöst,
um das zu ändern müsste ich die Schaltung ändern und irgendwelche Drähte
an die Platine löten, das möchte ich aber nicht.
> Ich hab dann einfach einen GAL genommen und die Daten als Truth-Table> programmiert. Geht gut. Der GAL steht nur etwas über.
Das ab ich fertig zu kaufen & programmiert im Internet gefunden, sogar
für einen akzeptablen Preis, doch leider steht es über und daher gehts
nicht.
Ich habe jetzt ein Layout gebastelt in dem ein Attiny26 in SMD (den es
zum Glück noch bei reichelt gibt) nicht übersteht, werde mal einen
Prototypen basteln und hoffen das es klappt.
Vielen Dank für die vielen Antworten
Stefan
Peter Dannegger schrieb:> Ich hab dann einfach einen GAL genommen und die Daten als Truth-Table> programmiert. Geht gut. Der GAL steht nur etwas über.
Noch eine Frage interessehalber: im worst case braucht man dazu 256x4 =
1024 Makrozellen, die hat kein GAL. Hat das zufällig trotzdem
reingepasst? Dann war das wahrscheinlich auch ein PROM als Logikersatz
"missbraucht". Hab ich vor langer langer Zeit auch so gemacht, so konnte
ich mal 5 TTL-ICs durch ein rückgekoppeltes PROM ersetzen, was den
Kunden ziemlich verblüfft hat. Das war natürlich bevor es PALs gab.
Gruss Reinhard
Reinhard Kern schrieb:> im worst case braucht man dazu 256x4 => 1024 Makrozellen
Nein, man braucht 4 Macrozellen, da 4 Ausgänge.
Es kann nur sein, daß die OR-Terme knapp werden.
Peter