ich bin gerade bei der Entwicklung einer USB Anbindung für unsere
Geräte.
Dabei habe ich mich für den AT89C5131 entschieden. Leider finde ich keine
Dokumentation über das Programmierkabel. Können die von den
AVR-Starterkits
genommen werden oder ist das wieder ein völlig neues. Weiss jemand etwas
darüber?
ich bestell mir mal das Evaluation Board. Dann sehe ich genau wie es geht.
Gruß,
Christian
> Habe mir mal eben das Datenblatt angesehen, mit dem ISP Kabel
> für die 89Sx Typen geht das bestimmt nicht.....
> Die Flip 2.2 Software von Atmel benutzt wohl den RS232 und nicht
> den Parallelport wie die AT89ISP Software für die 89S Typen.
>
> Währe ja auch mal wieder zu einfach gewesen :)
>
> Gruß,
> Christian
>
>
ich bin auf der Suche nach einem Microcontroller mit 8051 Kern,
der über die Chipeigene Serielle Schnittstelle mit einem 7 Bit
anstatt wie üblich 8 Bit Protokoll fahren kann.
Ich muss mit unserem Endgerät ein fremdes Endgerät fernsteuern,
welches nur
das
Protokoll 7-N-1 unterstützt. Mit den Microcontrollern die wir im Einsatz
haben,
kann ich nur das Protokoll 8-N-1 hardwaremäßig. Von einer reinen
Softwarelösung
möchte ich absehen.
Welchen Typ hast Du bei dem MC16C genommen?
Oder kennt jemand noch einen anderen Baustein?
Grüße aus München,
Christian
> Christian Sander schrieb:
>
> > Liebe Newsgroup,
> >
> > ich bin auf der Suche nach einem Microcontroller mit 8051 Kern,
> > der über die Chipeigene Serielle Schnittstelle mit einem 7 Bit
> > anstatt wie üblich 8 Bit Protokoll fahren kann.
> >
> > Kennt jemand so einen Baustein?
>
> Habe gerade einen M16C auf 7Bit programmiert. Der kann sowas per
> Hardware - mit einer bösen Falle: Da ja trotzdem byteweise gearbeitet
> wird habe ich eigentlich eine 0 im 8.Bit (MSB) erwartet - hier war aber
> immer eine "Copy" des 7.Bit enthalten...
>
> Hilft Dir jetzt zwar nicht direkt weiter, aber vielleicht kannst Du das
> auch noch brauchen...
>
>
>
> Gerald
>
Danke für die Hinweise. Ich werde es mal mit einem AVR probieren.
Habe die eigentlich schon lange im Auge.
Ich wünsche Euch allen noch einen schönen Tag,
Christian
> > Oder kennt jemand noch einen anderen Baustein?
>
> Wenn AVR für Dich kein Problem ist, die neueren (mit der sogenannten
> USART, wobei man an das ,S keine Anforderungen à la HDLC oder so
> stellen sollte ;-) können von 5 bis 9 bits pro Frame mit oder ohne
> parity mit 1 oder 2 Stopbits alles.
>
> Pinkompatibel zum "Industriestandard" 8051 wäre dabei der
ATmega8515,
> Du müßtest ihn also eigentlich in einer bestehenden Platine
benutzen
> können.
>
> --
> J"org Wunsch Unix support engineer
> joerg wunsch@interface-systems.de http://www.interface-systems.de/~j/
ich bin Jahrelanger 8051 Anwender in Assembler und mache meine ersten
Gehversuche mit
den AVRs. Bei den 8051 gab es einen Befehl "cpl". Der war richtig
praktisch
für den externen
Watchdog. Wie mache ich das bei einem AVR? Ich weiss die haben schon einen
WDOG drin,
aber ich möchte es trotzdem wissen.
ich verzweifele bei meinen ersten Gehversuchen mit dem AVR. Ich möchte
einfach nur
den Ausgang PD5 bei jedem Programmdurchlauf invertieren. Leider läuft das
Programm
gar nicht. Ich habe das kurze Programm eingefügt. Sieht jemand den
Fehler???
Danke Rolf, das mit dem SP stimmte. Deshalb lief es gar nicht.
Die LED ist eine Anzeige, und hat mit dem Watchdog nichts zu tun.
Der befindet sich auf PD5. Ich dachte mit ich belege ein Register mit
00 und abwechselnd ff und Teste dann das T-Flag.
Zu Deiner Routine. Würde ich nicht mit out PORTA alle Pints des
PORTs ansprechen?
Gruß,
Christian
> Christian Sander wrote:
>
> > .INCLUDE "8515def.inc"
>
> Ich spreche mal für meine Erfahrungen, welche sich aber
"nur" um 2313 und
> ATtiny15 drehen.
>
>
> Allgemein ist zu sagen, dass ich bewusst in meinen ersten Gehversuchen auf
> irgendwelche Watchdog-Geschichten verzichtet habe, da man dort schnell
> Fehler machen kann. Am besten erstmal abschalten.
>
>
> > main loop: rcall Watchdog
> > cbi PORTA, LED
> > rjmp main loop
>
> Diese Routine würde ich ein wenig anders gestalten:
>
> main loop:
> in temp, pina ; Aktuelle Werte einlesen
> com temp ; Werte invertieren
> out porta, temp ; Werte ausgeben
> rjmp main loop
>
> Wenn Du Dir sicher bist, dass r16 (alias temp) nicht in dieser Schleife
> nicht noch anderweitig genutzt wird, kannst Du auch die Zeile "in
temp,
> pina" weglassen.
>
> Zum Sinn der Routine:
> - "in" liest mir die Werte des Ports A auf mein R16 (PINA
könnte in diesem
> einfachen Fall auch durch PORTA ersetzt werden, aber: die Daten für
PORTA
> kommen aus dem Speicher, die von PINA von der Peripherie)
> - "com" invertiert alle Bits im Register (kann Probleme geben,
da alle
pins,
> die nicht als "Ausgang" definiert werden, dann jeweils den
Pull-Up
> einschalten und ausschalten und einschalten und aus.....)
> - "out" setzt die Ports wieder.
>
> Versuchs mal und gib ein Feedback,
> Viele Grüße,
> Michael
"Michael" <habe-keine@nirgendwo.de> schrieb im Newsbeitrag
news:cdqjlb$fjc$01$1@news.t-online.com...
> > Danke Rolf, das mit dem SP stimmte. Deshalb lief es gar nicht.
>
> Tut mir leid, an diese Möglichkeit dachte ich garnicht...
>
> > Die LED ist eine Anzeige, und hat mit dem Watchdog nichts zu tun.
>
> War nur ein Tipp meinerseits. Bei ersten Gehversuchen würde ich alles
> weglassen, was nicht benötigt wird. Aber wenn es dennoch klappt:
Herzlichen
> Glückwunsch!
>
> > Zu Deiner Routine. Würde ich nicht mit out PORTA alle Pints des
> > PORTs ansprechen?
>
> Ja würdest Du. Bei ersten Gehversuchen ist das sogar legitim... Es
ging ja
> nur darum, das ganze zum Laufen zu bringen, oder irre ich mich da? ich
habe
> das anfangs immer so gemacht und es hat wunderbar funktioniert.
>
> Viele Grüße,
> Michael
>
.def temp=r25 ;Register zur allgemeinen Verwendung
.equ rs recv=0
.equ Ser Busy=1
.equ TX Ready=2
.equ RX Ready=3
.equ int Rx Ready=4
Ziel war es den einzelnen Speicherzellen des Registers Labels zuzuordnen die
ich
dann später im Programm direkt ansprechen kann. Ungefähr so wie bei
8051 der
bitadressierbare Bereich.
Leider klappt es nicht so wie ich es mir vorgestellt habe. Wo ist mein
Denkfehler?
.def a flag=r25 ;Register zur allgemeinen Verwendung
;Flag von A Flag
.equ Ser Busy=1
.equ TX Ready=2
.equ RX Ready=4
.equ int Rx Ready=8
Über den Studio Debugger schaue ich mir das Register 25 an.
Da steht vor meinem Befehl 0x04 darin.
Trotzdem springt er mir in folgender Routine nach RECEIVE CONTROL END.
Wer weis RAT?
RECEIVE CONTROL: sbrs a flag,int Rx Ready
rjmp RECEIVE CONTROL END
cbi PORTA, LED1 ;LED
anschalten
RECEIVE CONTROL END:ret
>
> Ich gehe mal davon aus, dass jedes EQU ein Bit im Register darstellen
soll.
>
>
> > Ziel war es den einzelnen Speicherzellen des Registers Labels
zuzuordnen
> > die ich
> > dann später im Programm direkt ansprechen kann. Ungefähr so
wie bei 8051
> > der bitadressierbare Bereich.
>
> Leider kenne ich den 8051 nicht.
>
>
> > Leider klappt es nicht so wie ich es mir vorgestellt habe. Wo ist
mein
> > Denkfehler?
>
> Was klappt denn nicht? Es gibt Befehle, um ein einzelnes I/O-Bit zu
> setzen/löschen. Etwa in der Art:
>
> sbi portb, rs recv ;Bit setzen
> cli portb, rs recv ;Bit löschen
>
>
> Aber ein Bit im Register zu setzen, da gibt es (zumindest beim 2313)
keinen
> direkten Befehl, dann eben über einen Umweg.
>
> Wir setzen die equs auf eine Konstante, die der ehemaligen Konstante als
> Potenz 2^x entspricht:
>
> .equ rs recv=1
> .equ Ser Busy=2
> .equ TX Ready=4
> .equ RX Ready=8
> .equ int Rx Ready=16
>
> Jetzt kann man mit SBR und CBR Bits setzen und löschen:
>
> SBR temp, rs recv
> CBR temp, rs recv
>
> Bei diesen Befehlen hat der zweite Parameter die Funktion einer Maske,
d.h.
> alle Bits die in der Konstante gesetzt sind, werden im Register
> gelöscht/gesetzt. Also löscht
>
> CBR temp, 255
>
> das ganze Register, entspricht also
>
> CLR temp
>
> und
>
> SBR temp, 255
>
> wäre gleichbedeutend mit
>
> LDI temp, 255
>
>
> Viele Grüße,
> Michael
>
man kann keine .equ mit 2 werten angeben, da er logischerweise einen Fehler
beim Compilieren herausgibt.
Auch .equ Werte mit =16 funktionieren nicht.
Gibt es da keine allgemeine Lösung? Ist das wirklich so speziell???
Grüße,
Christian
> Hi,
>
> ja das dachte ich mir. Das ist das Problem an meiner Idee: Die EQUs
> enthalten potenzierte Werte und keine Bit-Nummern, aber SBRS & Co.
> verlangen Bit-Nummern. Das solltest Du zwei EQUs pro Bit machen, einen mit
> der Nummer und einen Potenzierten.
>
>
> > .equ int Rx Ready=8
>
> Mit einem
>
> .equ int Rx Ready=4
>
> würde es funktioniern, denke ich.
>
> PS: Wir hatten die neuen EQU-Werte so definiert:
>
> .equ rs recv=1
> .equ Ser Busy=2
> .equ TX Ready=4
> .equ RX Ready=8
> .equ int Rx Ready=16
>
> also kein
>
> int Rx Ready=8
>
>
> Viele Grüße,
> Michael
>
Vielen Dank Euch allen für die Hilfe. Jetzt funktionierts.
Damit hat es jetzt funktioniert, und noch besser, ich habe es verstanden.
Jetzt wo es funktioniert werde
ich auch die anderen Lösungsvorschläge ausprobieren.
Grüße,
Chris
> Christian Sander wrote:
>
> > Liebe Newsgroup,
> >
> > ich habe in einem Register folgendes definiert:
> >
> > .def temp=r25 ;Register zur allgemeinen Verwendung
> >
> > .equ rs recv=0
> > .equ Ser Busy=1
> > .equ TX Ready=2
> > .equ RX Ready=3
> > .equ int Rx Ready=4
> >
> > Ziel war es den einzelnen Speicherzellen des Registers Labels
zuzuordnen
> > die ich
> > dann später im Programm direkt ansprechen kann. Ungefähr so
wie bei 8051
> > der bitadressierbare Bereich.
> >
> > Leider klappt es nicht so wie ich es mir vorgestellt habe. Wo ist
mein
> > Denkfehler?
> >
> > Grüße aus München,
> >
> > Christian
>
> Es gibt auch noch die Möglichkeit über das Transfer-Flag zu
gehen, das
würde
> so aussehen:
>
> ;Deine EQUs kannst Du beibehalten.
>
>
> Bit setzen:
>
> SET
> ;Setzt das Transfer-Flag auf 1
> BLD temp, TX Ready
> ;Setzt das Bit TX Ready im Register temp auf den Wert vom
Transfer-Flag
>
> CLT
> ;Setzt das Transfer-Flag auf 0
> BLD temp, TX Ready
> ;Setzt das Bit TX Ready im Register temp auf den Wert vom
Transfer-Flag
>
> zum Bitlesen aus einem Register kannst Du irgendeine
> Skip-If-Bit-Is-Set/Cleared-Funktion benutzen.
>
>
> Viele Grüße,
> Michael
ich habe jetzt mein erstes Programm für einen AVR geschrieben. Jetzt
möchte
ich
es erweitern und stolpere da ich eigentlich vom 8051 komme über die
Bitdeclaration.
Im 8051 konnte ich im Bitdefinierbaren Bereich den einzelnen Speicherzellen
Labels
zuordnen. Beim AVR habe ich jetzt ein paar Registern auch nach folgenden
Schema
Labels für Bits zugeordnet:
.def V BYTE1 USB=R21
.equ B RX ON USB=0
.equ B RX OFF USB=1
.equ B RX LOC USB=2
.equ B RX REM USB=3
.equ B RX RST USB=4
.equ B RX B1 USB=5
.equ B RX B2 USB=6
.equ B RX B3 USB=7
Funktioniert auch wunderbar. Gibt es auch die Möglichkeit nach oben
genannten Schema den
64 I/O Registern solche Labels zuzuordnen. Oder wie macht Ihr das?
You can post new topics in this forum You can reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot post attachments in this forum