Bascom Problem: RC5 + UART

merzi1993

Neues Mitglied
19. Mai 2012
16
0
0
Österreich
Sprachen
  1. BascomAVR
  2. ANSI C
Hallo!

Ich hoffe ich habe das richtige Unterforum erwischt.

Ich habe einen Attiny24, welcher Daten über IR (RC5) empfangen soll und nebenbei auch Daten über UART empfangen soll.

Jedoch funktionieren beide miteinander nicht. D.h. ich kann nur über IR oder über UART empfangen, beides gleichzeitig funktioniert nicht.
Einzeln funktionieren beide einwandfrei, nur miteinander halt nicht.

Folgendes Programm habe ich dazu geschrieben:
Code:
$regfile = "attiny24.dat"
$crystal = 9830400
$hwstack = 10
$swstack = 16
$framesize = 22


'-----------------------------------------------------------------------------
'-----------------------------------------IR init-----------------------------
'-----------------------------------------------------------------------------

Dim Geraet As Byte , Kommando As Byte

Config Pinb.2 = Input
Portb.2 = 1
Config Rc5 = Pinb.2
Enable Interrupts

Config Porta.0 = Output
Porta.0 = 0




'-----------------------------------------------------------------------------
'---------------------------UART init-----------------------------------------
'-----------------------------------------------------------------------------


Open "coma.5:9600,8,n,1" For Input As #1
Dim Uart_data As Byte




Do


'-----------------------------------------------------------------------------
'--------------Prüfen ob Daten über IR-Empfänger empfangen wurden-------------
'-----------------------------------------------------------------------------
   Getrc5(geraet , Kommando)

      '-------------------wenn Daten empfangen wurden-------------------------
      If Geraet < 255 Then
         Kommando.7 = 0
         Porta.0 = 1
      End If

'-----------------------------------------------------------------------------
'---------------UART Daten empfangen------------------------------------------
'-----------------------------------------------------------------------------

Uart_data = Inkey(#1)

If Uart_data = "x" Then
   Porta.0 = 1
End If



Loop

'-----------------------------------------------------------------------------
'-------------------------UART schließen--------------------------------------
'-----------------------------------------------------------------------------
Close #1


End

Worin könnte hier das Problem liegen?
Ich vermute, dass das Problem irgendwas mit dem Timer zutun hat, nur hilft mir das auch nicht weiter.

Ich hoffe jemand hier kann mir weiterhelfen.

Gruß
Merzi
 
Na dann schauen wir mal...
Dein Rechenzwerg hat:
-kein Hardware-UART
- 2 Timer (Timer0=8bit, Timer1=16bit)
- 2 K Flash (unter Bascom und mit Software-UART und Software-RC5 ... wieviel Flash belegt das Programm so eigentlich?)
Du betreibst ihn (angeblich) mit ca 9MHz

Für die Biterkennung (in Software) brauchen beide getimte ... äh... Ereignisse, klar? Bascoms RC5-lib verwendet dafür standardmässig Timer0, wenn der Prozessor es anbietet kann man alternativ Timer2 verwenden lassen (hast Du aber nicht).
Die simulierte serielle Schnittstelle wird sicher auch Timer0 für diee Bitsynchronisation verwenden, ob man da Timer1 verwenden könnte, weiß ich nicht (Bascom Onlinehilfe für RC5 konnte ich öffnen - aber jetzt gehts irgendwie gar nicht mehr...).
Eigentlich sollte man beides mit einem Timer erschlagen können - die Standard-libs bieten das aber nicht. Also entweder programmierst Dir selbst was, oder Du verwendest einen Controller mit Hardware-UART (Oder Du findest jemanden, der Dir das programmiert.)

Aber das sollte sich vielleicht eher einer der Bascom-Profis ansehen...

MAAARKUUSSSSSS...
(*lufthol*)
 
Sehr schneller und sehr guter Rat. Danke :D

Naja ich habe mir eher gedacht, da es in BASCOM schon fertige Funktionen dafür gibt, verwende ich BASCOM, nur habe ich hier leider keine Ahnung von Timern usw. :confused:
Dann wird vorerst mal das RC5 weggelassen und nur mal mit BT gearbeitet. Kann man nichts machen.
Aber trotzdem danke für die schnelle Auskunft :)
 
Naja, Du hast ja selbst gemerkt, daß es für beide Probleme (jeweils) 'ne fertige Lösung gibt. Die beiden vertragen sich halt nicht. In der Online-Hilfe zum SW-UART finde ich nichts über Timer, aber ich kann mir nicht vorstellen, daß die das ohne Timer gemacht haben. Ich will das jetzt nicht komplett auseinandernehmen, um der Sache auf den Grund zu gehen - zumindest in Assembler läßt sich das sicher mit einem gemeinsamen Timer lösen, zumindest zum RC gibts da auch irgendwo 'ne Application Note von Atmel zu. Das paßt dann aber garantiert nicht zu:
habe ich hier leider keine Ahnung von Timern usw
Da fehlen dann sicher auch noch allgemeinere Mikrocontroller-Hardware-Fundamentals zu...
 
Hallo Merzi!

Ich bin zwar nicht Markus, nach dem LotadaC so geschriehen hat, aber ich schreibe trotzdem mal ein paar Zeilen dazu. :wink:

Momentan wüsste ich auch nicht, warum der RC5-Empfang und dein UART nicht zusammen funktionieren sollte. :hmmmm:
Standardmäßig wird bei BASCOM für den RC5-Empfang der TIMER0 verwendet.
In der Config-Anweisung könntest du aber auch den TIMER2 eingeben..... den dein Tiny24 aber leider nicht hat.


In der BASCOM-Hilfe zum Soft-UART steht allerdings folgender Hinweis:
Remember that a software UART is not as robust as a hardware UART, thus you can get timing problems if you have lots of interrupts in your program.

Nun ja, "a lot of interrupts" hast du nun zwar nicht unbedingt, aber der TIMER0 für den RC5-Empfang mag dir trotzdem das Timing für den Soft-UART versauen. :wink:


Etwas Anderes (außer noch dem Erhöhen der Stackwerte) fällt mir zu deinem Problem leider nicht ein.


Grüße,
Cassio
 
Stimmt, Dich hätte ich auch rufen können...
...Etwas Anderes (außer noch dem Erhöhen der Stackwerte) fällt mir zu deinem Problem leider nicht ein...
der Tiny24 hat 128 SRAM-Register. Etwas mehr als 48 für alle Stacks sollte da schon drinn sein. Insbesondere der HWStack scheint mir etwas knapp.
 
Hi,

der Tiny24 hat 128 SRAM-Register. Etwas mehr als 48 für alle Stacks sollte da schon drinn sein. Insbesondere der HWStack scheint mir etwas knapp.
Ich hab mal nachgesehen ...
- 32 Register
- 64 IO-Register
- 128 Byte SRAM
... je nachdem wie viele und was für Variablen man noch verwendet kann das schon recht eng werden.
Für nen Überblick bräuchte man da mal das komplette Programm.

Gruß
Dino
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)