000
15.03.2020, 14:26 Uhr
Brutzelmaster
|
Attiny2313 als alternative für die 74S287|KR556RT4 PROMs beim KC85!?
Hallo Leute, dies ist mein erster Beitrag im Forum
Zurzeit bin ich dabei einen Kompletten KC85.5 mit Tastatur aus den Original Unterlagen nachzubauen. Die Leiterplatten vom Chinaman und die meisten ICs sind inzwischen auch schon da. Das schwierigste ist es an die alten Proms zu einen vernünftigen Preis ranzukommen. Als alternative für die 74S287 entdeckte ich die russischen KR556RT4 PROMs auf eBay für 2 Euro/Stück. Nach wenigen Minuten habe ich nach der Programmieranleitung eine kleine Arduino Schaltung auf einen Steckbrett entwickelt die den Chip programmieren sollte. Leider schlug der erste Versuch fehl die ersten 4 Bits reinzubrennen. Dabei hat es gleich den ganzen Pin zerstört xD und quasi den Wert gleichzeitig auf alle Spalten reingebrutzelt und es ließen sich danach keine weiteren Bits mehr brennen. Da ich 5 PROMs bestellt habe und ich unbedingt 2 perfekte PROMs benötige habe ich mir überlegt einfach zum Testen erstmal ein Attiny2313A als PROM aus der Bastelkiste zu nehmen und den dann mit einer Schaltung zu Klonen, wenn der AVR im KC85 funktioniert. Denn ich bin mir auch nicht sicher ob der HEX Code richtig ist. Übernacht habe ich kleines mini Programm mit AVR Studio entwickelt, was sogar richtig gut funktioniert. Mit Hilfe von Bascom lässt sich der EEprom Code Adresse für Adresse einzeln bearbeiten. Dabei werden 2x 4 Bits gleich in ein Byte gespeichert so dass die 128x8Bits des AVRs voll belegt sind und genau der Speichergröße des 74S287|KR556RT4 mit 256x4Bits entsprechen. Da der Attiny wegen des größeren Gehäuses 4 Pins überstehen hat und 2 I/Os einfach verschwendet währen, habe ich eine Taste noch eingebaut, mit den sich der Dateninhalt dauerhaft per Tastendruck umprogrammieren lässt. Das funktioniert sogar richtig gut!
Hier der Code dazu:
Quellcode: | /* * Attiny2313_74S287.cpp * * Created: 13.03.2020 20:28:13 * Author : Brutzelmaster * * Attiny2313A Prom 74S287/KR556RT4 Emulator 256x4 = 3601. * * -Die internen Pullups an den IOs sind deaktiviert und müssen auf festes Potential gebracht werden. * * -Eine Brücke muss zwischen VCC und PB6 nach den programmieren eingebaut werden und zwischen Reset\ und VCC kommt ein Pullup Widerstand mit 10K * * -Die Pinbelegung ist gleich mit den 74S287/KR556RT4, wobei die Pins 1,2,19,20 wegen des größeren Gehäuses überstehen. * * -Zusätzliche kann eine PGM Taste zwischen PD0 und PB7 eingebaut werden um den Chip auf den Steckbrett zu * Programmieren. Optional kann man noch in reihe ein 100NF Kondensator mit einen 220K Widerstand Parallel schalten. * oder man kann in Bascom im EEprom Editor die 4-Bit Adressen händisch eingeben. Zufälligerweise entspricht der Speicherplatz genau den des Emulierten Proms * * -Für die PGM Taste ist ein delay mit 10ms einprogrammiert um das interne EEprom nicht so schnell zerbrutzeln zu lassen * * -Die gemessene Schaltverzögrung beträgt max 32,5us bei 5khz. Fmax ist 10khz * * SELFPRGEN = [ ] * DWEN = [ ] * EESAVE = [X] * SPIEN = [X] * WDTON = [ ] * BODLEVEL = DISABLED * RSTDISBL = [ ] * CKDIV8 = [ ] * CKOUT = [ ] * SUT_CKSEL = INTRCOSC_8MHZ_14CK_0MS * * EXTENDED = 0xFF (valid) * HIGH = 0x9F (valid) * LOW = 0xC4 (valid) * */ #define F_CPU 8000000UL #include <avr/io.h> #include <util/delay.h> #include <avr/eeprom.h>
uint8_t rbyte; uint8_t rhbyte; uint8_t abyte; uint8_t ebyte; uint8_t wbyte; uint8_t sbyte;
uint8_t A7; uint8_t A6; uint8_t A5; uint8_t A4; uint8_t A3; uint8_t A2; uint8_t A1; uint8_t A0;
uint8_t D3; uint8_t D2; uint8_t D1; uint8_t D0;
void init(void) { DDRA|=0B00000000; DDRD|=0B01000001; DDRB|=0B00011111; PORTB|=0B10000000;//PGM }
int main(void) { init(); while (true) { A0=(PIND&(1<<PD3)?0x01:0x00); A1=(PIND&(1<<PD4)?0x02:0x00); A2=(PIND&(1<<PD5)?0x04:0x00); A3=(PIND&(1<<PD2)?0x08:0x00); A4=(PINA&(1<<PA0)?0x10:0x00); A5=(PINA&(1<<PA1)?0x20:0x00); A6=(PIND&(1<<PD1)?0x40:0x00); A7=(PINB&(1<<PB5)?0x80:0x00); rbyte=A0|A1|A2|A3|A4|A5|A6|A7; rhbyte=rbyte/2; while (!eeprom_is_ready()) ; ebyte=eeprom_read_byte((uint8_t*) rhbyte); if(!(PINB&0B10000000)){ DDRD&=~0B01000000; DDRB&=~0B00000111; _delay_us(0x32); D0=(PINB&(1<<PB2)?0x01:0x00); D1=(PINB&(1<<PB1)?0x02:0x00); D2=(PINB&(1<<PB0)?0x04:0x00); D3=(PIND&(1<<PD6)?0x08:0x00); wbyte=D0|D1|D2|D3; if((rbyte%2)>0) { wbyte=wbyte&0B00001111; sbyte=ebyte&0B11110000; sbyte|=wbyte&0B00001111; } else { wbyte=wbyte<<4; wbyte=wbyte&0B11110000; sbyte=ebyte&0B00001111; sbyte|=wbyte&0B11110000; } while (!eeprom_is_ready()) ; eeprom_write_byte((uint8_t*)rhbyte,sbyte); _delay_ms(0x0A); DDRD|=0B01000000; DDRB|=0B00000111; } if(PINB&0B00011000) { PORTB|=0B00000111; PORTD|=0B01000000; } else { if((rbyte%2)>0) { if(ebyte&0B00000001)PORTB|=0B00000100; else PORTB&=~0B00000100; if(ebyte&0B00000010)PORTB|=0B00000010; else PORTB&=~0B00000010; if(ebyte&0B00000100)PORTB|=0B00000001; else PORTB&=~0B00000001; if(ebyte&0B00001000)PORTD|=0B01000000; else PORTD&=~0B01000000; }else{ if(ebyte&0B00010000)PORTB|=0B00000100; else PORTB&=~0B00000100; if(ebyte&0B00100000)PORTB|=0B00000010; else PORTB&=~0B00000010; if(ebyte&0B01000000)PORTB|=0B00000001; else PORTB&=~0B00000001; if(ebyte&0B10000000)PORTD|=0B01000000; else PORTD&=~0B01000000; } } } }
|
Und hier ist der HEX Code, den ich in das EEprom eingetippt habe. Dabei handelt es sich um die Daten des ICs D005
Quellcode: | 7 F 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 3 3 3 7 7 7 7 7 7 7 7 7 F 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 5 5 5 5 7 7 7 7 7 F 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 3 3 3 6 6 6 6 7 7 7 7 7 F 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 5 5 5 5 7 7 7 7 7 F 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 3 3 3 7 7 7 7 5 5 5 5 7 F 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 3 3 3 5 5 5 5 5 5 5 5 7 F 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 3 3 3 6 6 6 6 5 5 5 5 7 F 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 3 3 3 5 5 5 5 5 5 5 5
|
Hier noch ein Paar Fotos. Zusätzlich habe ich noch 4 LEDs an die Outputs gehangen, damit das Steckbrett nicht so voll ist.
Leider Musste ich nach den ersten Messungen feststellen, dass der AVR nicht so gut geeignet ist und nicht wirklich mehr als 10khz schafft. Da mein KC85 noch in einer Millionen Teile vor mir liegt und drauf wartet zusammengelötet zu werden habe ich noch ein wenig Zeit um das PROM Problem zu lösen.
Vielleicht kann jemand, der ein KC85 besitzt und bei den auch die Proms gesockelt sind den Attiny Mod testen und die Erfahrungen Posten, ob es funktioniert oder nicht. Denn sonst habe ich keine Ahnung, ob der KC85 nicht funktioniert, weil der AVR zu langsam ist, ich einen falschen Hex Code habe, oder ein anderer Fehler vorliegt.
Gerne würde ich die Russen Proms einbauen da es schon eine bösartige Sünde ist µC als Adressendecoder einzubauen, die ein Vielfaches der Rechenleistung haben als das restliche System. Kennt da jemand ein Datenblatt mit vollständiger Programmieranleitung? Meine Vermutung ist das es an der Fehlenden Strombegrenzung von der Programmierspannung lag. Ich habe auch schon gelesen, dass die Versorgungsspannung des ICs auch zuerst auf die Programmierspannung gebracht werden muss. Das habe ich auch nicht gemacht. Vielleicht stimmt auch das ganze Datenblatt was ich habe nicht für diesen IC. Denn da steht für alle bipolaren ICs xD
Falls jemand Ideen hat schon mal Danke im Voraus =) -- --------------------------------- Brutzelmaster - liebe es, zerstöre es!
+++Brutzelmaster(25) sucht nette hübsche Freundin (18-27) in Dresden+++
https://www.youtube.com/channel/UCYaez6mdLmmFa1EBcOuALtg/about Dieser Beitrag wurde am 15.03.2020 um 15:40 Uhr von Brutzelmaster editiert. |