Forum: Mikrocontroller und Digitale Elektronik 4433 -->UART-->PC


von Matthias (Gast)


Lesenswert?

Hi!
Ich teste gerade den AT90S4433 mit Bascom Basic.
Auf der PC Seite verwende ich Borland c++ 5.x und habe beide mit der
seriellen Schnittstelle verbunden.

$regfile = "4433def.dat"
$crystal = 4000000
$baud = 9600
Dim Lesen As Byte
Do
Input Lesen
Print Lesen
Loop
End

Mit dem PC schicke ich ein   byte, und möchte es von dem Atmel wieder
habe. (Als Übung)
Das funktioniert als Byte genau 3 mal, danach  kann ich nur -1
auslesen. Nach einem Reset wieder 3 mal etc.

Woran liegt das? wenn ich die variable als String deklariere, dann sind
mehrere Antworten vom Controller möglich, aber  das auch nur mit
begrenzter anzahl!

2. Problem
in der Schule verwenden wir KEIL uvision 2 und Programmieren einen 8051
in C.
Ich möchte gerne meinen Atmel ebenfalls mit c programmieren, aber woher
bekomme ich die .reg datei?
Die definitions datei die ich in Bascom verwende geht nicht.
Auf der Keil seite und im Netz habe ich keine Datei für den 4433
gefunden. wie mach ich das dann?

Besten Dank schon mal!

Gruß

Matthias

von Matthias (Gast)


Lesenswert?

ich habe es überarbeitet, aber es geht immer noch nicht.
Ich möchte bei dem Interrupt URXC (alle daten empfangen) einen wert
setzrn, aber der Interrupt kommt nicht.
Ich muß den comport pc seitig mehrere dutzend male öffnen und
schliessen , damit überhaupt "lesbare" zeichen übertragen werden.

Kann mir da bitte einer helfen?

$regfile = "4433def.dat"
$crystal = 4000000
$baud = 9600

Dim Lesen As Byte
'Lesen = "T"

Enable Interrupts
Enable Urxc

On Urxc Les
Do
   Test:
   If Lesen = "s" Then Gosub Stat
   Print "noch nicht"
   Return
Loop

Les:
'input Lesen
Lesen = "s"
Return

Stat:
Do
 Print "Interrpt hat ausgeloest"
Loop

von Schoaschi (Gast)


Lesenswert?

µVision unterstützt deinen Controller nicht.

ich kenne mich mit deinem Controller nicht aus, aber könnte es sein das
du vl ein UART-Flag setzen bzw löschen musst? und harmoniert die
Baudrate mit deiner verwendeten Taktfrequenz?
vl ist dir jetzt irgend ein geistesblitz gekommen.

mfg schoasch

PS.: Basic gehört verboten (meiner meinung nach ;-))

von Michael (Gast)


Lesenswert?

Schau mal hier, das bringt Dich wohl weiter.

http://www.rowalt.de/mc/avr/avrboard/03/avrb03.htm

von Matthias (Gast)


Lesenswert?

Danke euch!
Ich probier das mal aus.

Also der Controller (4433) ist der Vorzeigecontroller in eurem
Tutorial:)
Mit dem Flag usw. kenn ich mich nicht mit aus, aber die Seite von
Michael sieht schon mal vielversprechend aus ;)

Was muß ich den tun um den Controller unterstützt zu bekommen?
ich brauch doch nur diese reg datei, und uvision unterstützt bereits
dutzende Atmels der 89, und 91 Serie.

PS. Basic

Egal wie alle Leute immer über Basic motzen, es ist eine einfach zu
handhabende Programmiersprache, OK hält sich nicht an alle
konventionen, aber man hat in der Regel in kürzester Zeit ein
brauchbares Ergebnis.

Zum Vergleich
Visual Basic, habe ich mir in gut einer Woche selber mit einem Tutorial
beigebracht, und konnte schon "relativ" schöne Prgramme schreiben.

Mit Visual C++ war ich nach gut 2 Monaten so weit, um das selbe
hinzukriegen (und das hatten wir noch in der Schule nebenher).
Und ich denke das mir einige konvertierungen immer noch nicht in c++
gelingen, weil einfach die Lektüre wesendlich komplizierter gestrickt
ist ;)

Mein Fazit:
Für Hobbyprogrammierer ist Basic Perfek!
Aber da das Beruflich auf mich zukommen kann, würde ich den gerne in c
Programmieren.

Durch privaten Spaghetti Code muß doch eh kein Zweiter durchblicken;)

von Guenther (Gast)


Lesenswert?

Hi,

>Durch privaten Spaghetti Code muß doch eh kein Zweiter durchblicken;)

Okay. Wenn du beruflich damit zu tun haben wirst, vergiss das lieber
gleich wieder. Selbst im privaten Bereich ist ne halbwegs vernuenftige
Dokumentation eines Codes angebracht, sonst erfindest du das Rad immer
wieder neu.

Und wer weiss, ob du das was du zu Hause schonmal programmiert hast
nicht spaeter mal beruflich wiederverwenden kannst.

Und Basic ist zwar einfach zu lernen, aber eben lange nicht so maechtig
wie C++ oder C. Das ist also kein boeser Wille, wenn die Tutorials
komplizierter sind.

der Guenther

von Matthias (Gast)


Lesenswert?

War nicht speziell auf mich bezogen, wie gesagt ich würde am liebsten
mit c Arbeiten (Keil), da ich da schon einige Erfahrungen mit einem
8051 sammeln konnte.
Ich wollte nur sagen das BASIC auf jeden Fall seine Daseinsberechtigung
hat.

Nun zurück zum Thema,
Auf der Seite wird leider nicht auf die Interrupts eingegangen, die
aber für mich zwingend erforderlich sind.
Das einfache senden eines Strings klappt, bis auf die Connect Probleme,
problemlos. Ich muß die Schnittstelle im Borland Programm mehrmals
öffnen und schließen damit es geht.

Bei dem 8051 und Keil frage ich einfach das RI Signal des SCON
Registers ab, das mir mitteilt das was empfangen wurde,
aber wie geht das mit dem 4433 und Bascom?

Das ganze soll ein Lüftersteuerung werden(meine alte), und ich möchte
die Grenzwerte, über das c++ Programm eingeben, und die aktuellen
istwerte sowie die Temperaturen auslesen können, natürlich nur bei
bedarf!
Aus dem Grund muß das über Interrupts laufen

von Matthias (Gast)


Lesenswert?

Habs doch noch gefunden auf der Seite!

Interrupts gehen jetzt!
Aber ich kann immer nur ein Zeichen auf einmal sende.

Onrxd:
  I = Udr                              'Byte aus der UART auslesen
  Printbin I                           'Byte als Echo zurückgeben
  Print 5
Return

In dem Fall gibt er mir das Zeichen als Byte, und direkt die 5 als
Byte!
Wenn ich den Interrpt erneut auslöse, kommen 2 Bytes mit Schrott!
Erst ein neuer Interrupt führt wieder zum gewünschten Ziel!

Also jeder 2. Interrupt ist nur zu gebrauche, jedenfalls dann wenn ich
mehr als einen Print  befehl verwende!

Woran liegt das?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.