Sida 1 av 2
Porta kod från Arduino Uno till ATtiny85
Postat: 30 april 2024, 15:11:53
av Xoffis
Jag har hittat kod på nätet för att lura stereon i bilen till att tro att man kör med en CD växlare så man kan ha AUX in utan att köra med en kasett adapter!
Men det känns som overkill att ha en hel UNO liggandes bakom stereon så tänkte porta koden till en tiny med ett eget litet kort
Men koden är skriven med "PortManipulation" vilket är helt nytt och okänt för mig! Och tydligen inte en funktion som tiny klarar av...
Kanske är det mer i koden som kommer strula, men just detta är det första IDE säger inte funkar, så en sak i taget =)
Som jag förstår det så använder de "PortManipulation" för att det är tidskänsligt så att använda PINMODE går för långsamt, går detta komma runt med attiny?
Här är första snutten IDE inte gillar
Tack på förhand =D
Re: Porta kod från Arduino Uno till ATtiny85
Postat: 30 april 2024, 15:50:21
av HUGGBÄVERN
Ingen expert på Arduino, men en Atmega628P, eller vad den nu heter är ju marginellt större en en tiny.
Re: Porta kod från Arduino Uno till ATtiny85
Postat: 30 april 2024, 15:56:12
av FormerMazda
Ta en mindre arduino då?
En nano har ju typ samma prolle som uno om jag ser rätt? 328P vs 328 endast, vet inte om det påverkar detta projekt?
https://store.arduino.cc/products/arduino-uno-rev3
https://store.arduino.cc/products/arduino-nano
Re: Porta kod från Arduino Uno till ATtiny85
Postat: 30 april 2024, 16:11:30
av SeniorLemuren
Vist kan man manipulera portarna på en Atiny, men den har ju mindre antal portar så registren ser inte likadana ut. Kolla portregistret på Uno resp Atiny. Bifogat bild portreg. och portconfig fär Atiny.
Länk till ATtiny85 Datasheet
atiny port register.png
atiny pinkonfig.png
Re: Porta kod från Arduino Uno till ATtiny85
Postat: 30 april 2024, 16:12:44
av Icecap
Om t.ex. DDRD inte är definierat kommer det ett kompileringsfel.
Samma med MELBUS_DATA.
Även om dessa är definierat till någon icke-existerande port.
Dessa är sannolikt definierat i någon .H-fil i originalprojektet.
Re: Porta kod från Arduino Uno till ATtiny85
Postat: 30 april 2024, 16:27:54
av Xoffis
Projektet i sin grund kommer här ifrån!
https://gizmosnack.blogspot.com/2015/11 ... radio.html
Kanske är till och med Karl Hagström en som hänger här i forumet? =D
Men tänkte börja med koden som är moddad av Sebastian som finns här
https://gist.github.com/klalle/1ae1bfec ... 492180565e
HUGGBÄVERN skrev: ↑30 april 2024, 15:50:21
Ingen expert på Arduino, men en Atmega628P, eller vad den nu heter är ju marginellt större en en tiny.
Tänkt mig ett eget litet PCB med saker jag har hemma och en DIP8 är betydligt mindre än en DIP28 =)
Som sagt, vill göra eget litet PCB med delar jag har hemma, har ju 328 också, men blir ju större (å lite dyrare)
SeniorLemuren skrev: ↑30 april 2024, 16:11:30
Vist kan man manipulera portarna på en Atiny, men den har ju mindre antal portar så registren ser inte likadana ut. Kolla portregistret på Uno resp Atiny. Bifogat bild portreg. och portconfig fär Atiny.
Länk till ATtiny85 Datasheet
atiny port register.png
atiny pinkonfig.png
Detta skall jag kika på! kanske bara är att ändra lite då?
Re: Porta kod från Arduino Uno till ATtiny85
Postat: 30 april 2024, 16:36:48
av hawkan
Finns ju atmega328 pro mini, har gjort en del projekt med den.
Och nano, ungefär samma fast med usb-port.
Förslag är att du gör en pro mini version. Är du nöjd med funktionen och vill göra en attiny så har du
mycket hjälp av att kunna se hur signaler och data ska vara. När du portar till attinyn.
Re: Porta kod från Arduino Uno till ATtiny85
Postat: 1 maj 2024, 11:31:57
av Mindmapper
Xoffis skrev: ↑30 april 2024, 15:11:53
Jag har hittat kod på nätet för att lura stereon i bilen till att tro att man kör med en CD växlare så man kan ha AUX in utan att köra med en kasett adapter!
Men det känns som overkill att ha en hel UNO liggandes bakom stereon så tänkte porta koden till en tiny med ett eget litet kort
Men koden är skriven med "PortManipulation" vilket är helt nytt och okänt för mig! Och tydligen inte en funktion som tiny klarar av...
Kanske är det mer i koden som kommer strula, men just detta är det första IDE säger inte funkar, så en sak i taget =)
Som jag förstår det så använder de "PortManipulation" för att det är tidskänsligt så att använda PINMODE går för långsamt, går detta komma runt med attiny?
Här är första snutten IDE inte gillar
Tack på förhand =D
Som skrivits tidigare är registren inte lika.
Tiny UART lär också vara väldigt olika de större typerna.
Det blir väldigt stor skillnad i att använda UART och skifta över 8 bitar i taget eller att bitbanga.
Har inte tittat efter så noga men antar att programmet använder UART för kommunikationen mellan CD växlare och radion.
Re: Porta kod från Arduino Uno till ATtiny85
Postat: 1 maj 2024, 12:15:07
av hawkan
Nej den använder inte uart, men det är rätt på så vis att det är stort sett omöjligt att lösa detta utan hela koden, iaf såpass att man förstår meningen av vad den ska göra.
Det finns två olika två-rader
Kod: Markera allt
DDRD &= ~(1<<MELBUS_DATA);
PORTD |= (1<<MELBUS_DATA);
PORTD &= (~(1<<MELBUS_DATA));
DDRD |= (1<<MELBUS_DATA);
MELBUS_DATA är pinne 4, den är normalt INPUT_PULLUP. Men tydligen är det så att i vissa fall efter man mottagit data
så ska pinnen sättas aktivt låg. Det är vad raderna gör (tror jag). Sedan återställer den. Gissar jag för jag orkade inte följa exakt.
DDRD är riktningsregister för PORTD, pinne 0-7. DDRD-raden ändrar från input till output på pinne 4, eller tvärtom.
PORTD-är pin-status för pinne 0-7. Den antingen sätter hög eller låg på pinne 4.
Så vad som behövs är motsvarande funktion för attiny.
Iofs undrar jag varför det inte går med pinMode och digitalWrite, det är inte speciellt mycket overhead i de funktionerna.
Se här för atmega
https://github.com/arduino/ArduinoCore- ... _digital.c
Första försöket med attiny borde vara att använda pinMode och digitalWrite istället.
https://docs.arduino.cc/retired/hacking ... ipulation/
Re: Porta kod från Arduino Uno till ATtiny85
Postat: 1 maj 2024, 12:35:15
av hawkan
Och om man pusslar med tidigare bild om register, så ser man att det bara finns en port på attiny85 portB.
Riktningsregistret verkar ha samma funktion och heter då DDRB.
PORTD vs PORTB och PINB är något annorlunda, men varför inte bara byta PORTD till PORTB? Kanske det funkar?
Annars får du titta in i funktionen av PORTB speciellt pullup-resistor om det är vad du vill ha.
Datablad är nödvändigt
https://ww1.microchip.com/downloads/en/ ... asheet.pdf
Re: Porta kod från Arduino Uno till ATtiny85
Postat: 1 maj 2024, 16:26:40
av Xoffis
Ändrade alla D i dessa DDRD och PORTD till DDRB och PORTB då allt på tinyn ligger under B enligt Lemurens finfina bild!
Så nu verkar alla problem bara borta gällande det, men nu kom nästa (precis som jag trodde)
Nu gnäller den över
EIMSK och EIFR
:/
Arduino IDE föreslår att jag skall använda "GIMSK" istället för "EIMSK" och "TIFR" istället för "EIFR" och ja, då kompileras allt bra, men vad är skillnaden?
Re: Porta kod från Arduino Uno till ATtiny85
Postat: 1 maj 2024, 17:42:41
av SeniorLemuren
Ja, det är ju samma där. registren år olika. se bilder.
arduino eimsk reg.png
arduino gimsk reg.png
Länk till hur det funkar
Re: Porta kod från Arduino Uno till ATtiny85
Postat: 1 maj 2024, 17:58:03
av Xoffis
OK! Så då va IDEs tips rätt då!
Tackar för all hjälp! Nu skall vi se om det lirar också!
Lånat en radio av en polare så jag slipper riva ur min bil innan man vet! =)
Re: Porta kod från Arduino Uno till ATtiny85
Postat: 2 maj 2024, 08:28:23
av SeniorLemuren
Lägg märke till att bitarna som används inte är samma på Uno och Atiny och att det bara finns interupt 0 på Atiny men interupt 0 och 1 på Uno.
Läs mer här.
Re: Porta kod från Arduino Uno till ATtiny85
Postat: 2 maj 2024, 08:40:27
av hawkan
Ja det går inte att göra detta utan att förstå vad som händer och hur man uppnår det med registren på attinyn.
Det går inte att bara byta en beteckning mot en annan. Med slumpen kan det stämma, men räkna inte med det.