interface:RS485+inputs->AVR->rs232->pc

Ik heb enkele vragen over een onderdeel van mijn eindwerk.

Ik moet een brandcentrale uitlezen.
Deze zend een RS485 signaal: 9600bps, 8 bits,no parity,1 stopbit. De boodschappen zijn 16 of 68 bytes + start en stopbyte. Om de minuut wordt de tijd doorgezonden, (16 bytes) deze boodschap ga ik negeren.
Er moeten ook +-18 magneetcontacten, die zich in de deuren bevinden, uitgelezen worden. De info moet naar een pc gezonden worden, die de toestand dan grafisch weergeeft.

Mijn oplossing:
een MAX485 tussen de brandcentrale en een AVR, de magneetcontacten aan de inputs van de avr en de info via MAX232 asynchroon naar een pc zenden.

vb van de werking:
De brandcentrale zend plots een bericht van 68 bytes. Dit moet dus een interrupt veroorzaken waar de avr zo snel mogelijk op reageert en de 68 bytes opslaat. Er kunnen meerdere boodschappen na elkaar komen dus er moet toch wat geheugen zijn.
Als er geen interrupts zijn zal de avr de info naar de pc zenden en de ingangen pollen om de stand van de deuren te controleren. Als deze verandert zijn dan moet dat doorgezonden worden.
Voor de communicatie met de pc dacht ik eraan om de pc softwarematig te laten bevestigen dat de info toegekomen is, als het verzenden naar de pc onderbroken werd door een interupt van het alarm dan zal de pc de info opnieuw vragen.

Vragen:
Ik wil een ATMEGA162 gebruiken omdat deze 2 UART's en veel I/O pinnen heeft en ik kan hem gemakkelijk krijgen. Heeft deze avr genoeg geheugen en zal dit werken?
In welk geheugen komen de boodschappen van 68 bytes? In de SRAM van 1024 bytes?

Ik ben een beginner met avr's en ik weet niet goed waarvoor het geheugen dient. Ik denk dat in het flash geheugen mijn programma komt en in de SRAM de ontvangen info maar wat komt er in de EEPROM?

Ik programmeer in C (of toch ASM?). Hoe weet ik of de avr snel genoeg zal reageren op de RS485 interrupts? Kan ik de minimum kloksnelheid uitrekenen? Dan moet ik weten hoeveel klokcyclussen de avr nodig heeft voor hij begint met het detecteren van de startbyte.

Alle tips zijn welkom, compleet andere voorstellen zijn dus ook welkom!

Alvast bedankt voor het lezen!

Op (de default interne oscillator van) 1 MHz heb je 100 instructies de tijd per bitje dat over de RS485-bus binnenkomt. Niet dat je met 1 MHz ook maar in de buurt van een nette baudrate komt (zo ongeveer de enige die het doet is 4800bps :P) maar even voor de beeldvorming.
Met een 14.7456 MHz kristal heb je 1536 instructies per bitje dat binnenkomt, en dan draait hij dus nog niet eens op de max frequentie.

Snel zat is het dus sowieso.

Je ingelezen bytes komen in je SRAM ja. In je flash komt inderdaad het programma en in de EEPROM kun je bijvoorbeeld instellingen of zo opslaan.

Als de AVR (en dat heeft hij) een U(S)ART heeft, dan geschied het binnenkomen van de data geheel automatisch. Enige wat je hoeft te doen is een interrupt opvangen en het buffer (fifo) uitlezen en beslissen wat je wilt doen met de binnengekomen byte.
Dit kun je dus in een buffertje zetten, en zodra je hele bericht goed binnen is kun je dat op je RS-232-bus zetten.
Dat is dus allemaal interrupt-werk, evenals het alarm.

In je main-loop loop je al je ingangen langs, eventueel een busy-wait als je geen miljoen keer per seconde die poorten hoeft te controleren.

Met 1536 instructies per bitje is dat iets dat MAKKELIJK met C kan, hoef je geen ASM voor te leren...

Heel erg bedankt!
Een tweede opinie voor je componenten koopt is altijd leuk!

Ik zal enkele kristallen (3.6864, 7.3728 en 14.7456MHz) en zo'n ATmega 162 kopen.
Ik test wel of het lukt met een tragere klok ook. Onze leraars zijn er niet voor te vinden om alle projecten met een 'grote' AVR te doen op volle snelheid.

Ik heb ASM en C geleerd (op pc), als er niks kritiek is (code-omvang,snelheid,timing) programmeer ik het liefst in C.